201025
authorhgs
Thu, 24 Jun 2010 14:32:18 +0300
changeset 47 f83bd4ae1fe3
parent 45 780f926bc26c
child 48 10eaf342f539
201025
email_plat/email_client_api/email_client_api.metaxml
email_plat/email_client_api/email_client_api.pri
email_plat/email_client_api/emailapidefs.h
email_plat/email_client_api/emailclientapi.hrh
email_plat/email_client_api/emailinterfacefactory.h
email_plat/email_client_api/emailinterfacefactory.inl
email_plat/email_client_api/emailsorting.h
email_plat/email_client_api/memailaddress.h
email_plat/email_client_api/memailclientapi.h
email_plat/email_client_api/memailcontent.h
email_plat/email_client_api/memailfolder.h
email_plat/email_client_api/memailmailbox.h
email_plat/email_client_api/memailmessage.h
email_plat/email_client_api/memailmessagesearch.h
email_plat/email_client_api/mmailboxcontentobserver.h
email_plat/email_client_api/mmailboxsyncobserver.h
email_plat/email_client_api/mmessageiterator.h
email_plat/email_plat.pro
email_plat/nmail_client_api/nmapimessagemanager.h
email_plat/nmail_settings_api/nmail_settings_api.pri
email_plat/nmail_settings_api/nmapimailboxsettings.h
email_plat/nmail_settings_api/nmapimailboxsettingsdata.h
emailservices/emailclientapi/bwins/emailclientapiu.def
emailservices/emailclientapi/data/emailclientapi.rss
emailservices/emailclientapi/eabi/emailclientapiu.def
emailservices/emailclientapi/emailclientapi.pro
emailservices/emailclientapi/inc/emailaddress.h
emailservices/emailclientapi/inc/emailapiutils.h
emailservices/emailclientapi/inc/emailapiutils.inl
emailservices/emailclientapi/inc/emailattachment.h
emailservices/emailclientapi/inc/emailclientapiimpl.h
emailservices/emailclientapi/inc/emailclientapiimpl.hrh
emailservices/emailclientapi/inc/emailclientapiimpldefs.h
emailservices/emailclientapi/inc/emailclientpluginmanager.h
emailservices/emailclientapi/inc/emailcontent.h
emailservices/emailclientapi/inc/emailfolder.h
emailservices/emailclientapi/inc/emailinterfacefactoryimpl.h
emailservices/emailclientapi/inc/emailmailbox.h
emailservices/emailclientapi/inc/emailmailboxcache.h
emailservices/emailclientapi/inc/emailmessage.h
emailservices/emailclientapi/inc/emailmessagesearch.h
emailservices/emailclientapi/inc/emailmultipart.h
emailservices/emailclientapi/inc/emailtextcontent.h
emailservices/emailclientapi/inc/messageiterator.h
emailservices/emailclientapi/rom/emailclientapi.iby
emailservices/emailclientapi/src/emailaddress.cpp
emailservices/emailclientapi/src/emailapiutils.cpp
emailservices/emailclientapi/src/emailattachment.cpp
emailservices/emailclientapi/src/emailclientapiimpl.cpp
emailservices/emailclientapi/src/emailcontent.cpp
emailservices/emailclientapi/src/emailfolder.cpp
emailservices/emailclientapi/src/emailinterfacefactoryimpl.cpp
emailservices/emailclientapi/src/emailmailbox.cpp
emailservices/emailclientapi/src/emailmailboxcache.cpp
emailservices/emailclientapi/src/emailmessage.cpp
emailservices/emailclientapi/src/emailmessagesearch.cpp
emailservices/emailclientapi/src/emailmultipart.cpp
emailservices/emailclientapi/src/emailtextcontent.cpp
emailservices/emailclientapi/src/implproxy.cpp
emailservices/emailclientapi/src/messageiterator.cpp
emailservices/emaildebug/inc/emailtrace.h
emailservices/emailframework/src/CFSMailClient.cpp
emailservices/emailstore/base_plugin/inc/BasePlugin.h
emailservices/emailstore/base_plugin/inc/baseplugindelayedops.h
emailservices/emailstore/base_plugin/inc/baseplugindelayedopsprivate.h
emailservices/emailstore/base_plugin/src/BasePlugin.cpp
emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp
emailservices/emailstore/base_plugin/src/basepluginmisc.cpp
emailservices/nmailagent/nmailagent.pro
emailservices/nmailagent/src/nmmailagent.cpp
emailservices/nmclientapi/bwins/nmailclientapiu.def
emailservices/nmclientapi/eabi/nmailclientapiu.def
emailservices/nmclientapi/inc/nmapimailboxsettings_p.h
emailservices/nmclientapi/inc/nmapimailboxsettingsdata_p.h
emailservices/nmclientapi/inc/nmapimessagemanager_p.h
emailservices/nmclientapi/inc/nmapipopimapsettingsmanager.h
emailservices/nmclientapi/nmclientapi.pro
emailservices/nmclientapi/src/nmapimailboxsettings.cpp
emailservices/nmclientapi/src/nmapimailboxsettings_p.cpp
emailservices/nmclientapi/src/nmapimailboxsettingsdata.cpp
emailservices/nmclientapi/src/nmapimailboxsettingsdata_p.cpp
emailservices/nmclientapi/src/nmapimessagemanager.cpp
emailservices/nmclientapi/src/nmapimessagemanager_p.cpp
emailservices/nmclientapi/src/nmapipopimapsettingsmanager.cpp
emailservices/nmregister/src/nmmailboxregisterinterface.cpp
emailservices/nmregister/translations/nmregister.ts
emailuis/nmailcpplugin/inc/nmsettingsplugin.h
emailuis/nmailcpplugin/src/nmsettingsplugin.cpp
emailuis/nmailui/conf/nmeditorview.docml
emailuis/nmailui/conf/nmmailboxlistview.docml
emailuis/nmailui/conf/nmmessagelistview.docml
emailuis/nmailui/inc/nmaction.h
emailuis/nmailui/inc/nmactionrequest.h
emailuis/nmailui/inc/nmapplication.h
emailuis/nmailui/inc/nmattachmentmanager.h
emailuis/nmailui/inc/nmattachmentpicker.h
emailuis/nmailui/inc/nmbaseview.h
emailuis/nmailui/inc/nmeditorcontent.h
emailuis/nmailui/inc/nmeditorheader.h
emailuis/nmailui/inc/nmeditorview.h
emailuis/nmailui/inc/nmmailboxlistview.h
emailuis/nmailui/inc/nmmailboxlistviewitem.h
emailuis/nmailui/inc/nmmessagelistview.h
emailuis/nmailui/inc/nmmessagelistviewitem.h
emailuis/nmailui/inc/nmrecipientfield.h
emailuis/nmailui/inc/nmsendserviceinterface.h
emailuis/nmailui/inc/nmuidocumentloader.h
emailuis/nmailui/inc/nmuiheaders.h
emailuis/nmailui/inc/nmuriserviceinterface.h
emailuis/nmailui/inc/nmutilities.h
emailuis/nmailui/inc/nmviewerheader.h
emailuis/nmailui/inc/nmviewerserviceinterface.h
emailuis/nmailui/inc/nmviewerview.h
emailuis/nmailui/inc/nmviewerwebview.h
emailuis/nmailui/nmailui.pro
emailuis/nmailui/src/main.cpp
emailuis/nmailui/src/nmapplication.cpp
emailuis/nmailui/src/nmattachmentlist.cpp
emailuis/nmailui/src/nmattachmentmanager.cpp
emailuis/nmailui/src/nmattachmentpicker.cpp
emailuis/nmailui/src/nmbaseview.cpp
emailuis/nmailui/src/nmeditorcontent.cpp
emailuis/nmailui/src/nmeditorheader.cpp
emailuis/nmailui/src/nmeditortextdocument.cpp
emailuis/nmailui/src/nmeditorview.cpp
emailuis/nmailui/src/nmmailboxlistview.cpp
emailuis/nmailui/src/nmmailboxlistviewitem.cpp
emailuis/nmailui/src/nmmailboxselectiondialog.cpp
emailuis/nmailui/src/nmmailboxserviceinterface.cpp
emailuis/nmailui/src/nmmessagelistview.cpp
emailuis/nmailui/src/nmmessagelistviewitem.cpp
emailuis/nmailui/src/nmrecipientfield.cpp
emailuis/nmailui/src/nmsendserviceinterface.cpp
emailuis/nmailui/src/nmuidocumentloader.cpp
emailuis/nmailui/src/nmuieffects.cpp
emailuis/nmailui/src/nmuiextensionmanager.cpp
emailuis/nmailui/src/nmuriserviceinterface.cpp
emailuis/nmailui/src/nmutilities.cpp
emailuis/nmailui/src/nmviewerheader.cpp
emailuis/nmailui/src/nmviewerserviceinterface.cpp
emailuis/nmailui/src/nmviewerview.cpp
emailuis/nmailui/src/nmviewerviewnetmanager.cpp
emailuis/nmailui/src/nmviewerviewnetreply.cpp
emailuis/nmailui/src/nmviewerwebview.cpp
emailuis/nmailui/translations/mail.qm
emailuis/nmailui/translations/mail.ts
emailuis/nmailuiengine/bwins/nmailuiengineu.def
emailuis/nmailuiengine/eabi/nmailuiengineu.def
emailuis/nmailuiengine/inc/nmdataplugininterface.h
emailuis/nmailuiengine/inc/nmuiengine.h
emailuis/nmailuiengine/src/nmuiengine.cpp
emailuis/nmailuiwidgets/bwins/nmailuiwidgetsu.def
emailuis/nmailuiwidgets/eabi/nmailuiwidgetsu.def
emailuis/nmailuiwidgets/inc/nmeditortextedit.h
emailuis/nmailuiwidgets/inc/nmrecipientlineedit.h
emailuis/nmailuiwidgets/nmailuiwidgets.qrc
emailuis/nmailuiwidgets/src/nmattachmentlistwidget.cpp
emailuis/nmailuiwidgets/src/nmeditortextedit.cpp
emailuis/nmailuiwidgets/src/nmrecipientlineedit.cpp
emailuis/nmframeworkadapter/inc/nmframeworkadapter.h
emailuis/nmframeworkadapter/inc/nmframeworkadapterheaders.h
emailuis/nmframeworkadapter/inc/nmfwadeletemailboxoperation.h
emailuis/nmframeworkadapter/nmframeworkadapter.pro
emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp
emailuis/nmframeworkadapter/src/nmfwadeletemailboxoperation.cpp
emailuis/nmhswidget/conf/nmhswidgettitle.docml
emailuis/nmhswidget/inc/nmhswidget.h
emailuis/nmhswidget/inc/nmhswidgetconsts.h
emailuis/nmhswidget/inc/nmhswidgetemailrow.h
emailuis/nmhswidget/inc/nmhswidgettitlerow.h
emailuis/nmhswidget/src/nmhswidget.cpp
emailuis/nmhswidget/src/nmhswidgetdatetimeobserver_p.cpp
emailuis/nmhswidget/src/nmhswidgetemailengine.cpp
emailuis/nmhswidget/src/nmhswidgetemailrow.cpp
emailuis/nmhswidget/src/nmhswidgettitlerow.cpp
emailuis/nmhswidget/translations/mailwidget.ts
emailuis/nmsettingui/src/nmmailboxsettingsmanager.cpp
inc/emailshutdownconst.h
inc/emailshutdownconst.hrh
ipsservices/ipssosaoplugin/src/IpsSosAOImapAgent.cpp
ipsservices/ipssosaoplugin/src/IpsSosAOPopAgent.cpp
ipsservices/ipssosplugin/inc/ipsplgcommon.h
ipsservices/ipssosplugin/inc/ipsplgimap4connectop.h
ipsservices/ipssosplugin/src/ipsplgimap4connectop.cpp
ipsservices/ipssosplugin/src/ipsplgimap4plugin.cpp
ipsservices/ipssosplugin/src/ipsplgmsgmapper.cpp
ipsservices/ipssosplugin/src/ipsplgpop3plugin.cpp
ipsservices/nmipssettings/inc/nmipssettingshelper.h
ipsservices/nmipssettings/src/nmipssettingshelper.cpp
ipsservices/nmipssettings/src/nmipssettingsplugin.cpp
nmail.pro
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/email_client_api.metaxml	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<api id="df8c92b67351daff85c808d60deaccd2" dataversion="2.0">
+  <name>email client api</name>
+  <description>Email client api allows listing and accessing mailboxes and  email messages. Messages can be created, replied, forwared and searched. Specific mailbox can be launched in the Email application.</description>
+  <type>c++</type>
+  <collection>email_plat</collection>
+  <libs/>
+  <release category="platform" sinceversion="5.0"/>
+  <attributes>
+    <htmldocprovided>no</htmldocprovided>
+    <adaptation>no</adaptation>
+  </attributes>
+</api>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/email_client_api.pri	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:
+#
+#
+symbian*: {
+    # Build.inf rules
+    BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+            "email_client_api/emailinterfacefactory.h       APP_LAYER_PLATFORM_EXPORT_PATH(emailinterfacefactory.h)" \
+            "email_client_api/emailinterfacefactory.inl     APP_LAYER_PLATFORM_EXPORT_PATH(emailinterfacefactory.inl)" \
+            "email_client_api/emailclientapi.hrh            APP_LAYER_PLATFORM_EXPORT_PATH(emailclientapi.hrh)" \
+            "email_client_api/emailapidefs.h                APP_LAYER_PLATFORM_EXPORT_PATH(emailapidefs.h)" \
+            "email_client_api/emailsorting.h                APP_LAYER_PLATFORM_EXPORT_PATH(emailsorting.h)" \
+            "email_client_api/mmessageiterator.h            APP_LAYER_PLATFORM_EXPORT_PATH(mmessageiterator.h)" \
+            "email_client_api/memailclientapi.h             APP_LAYER_PLATFORM_EXPORT_PATH(memailclientapi.h)" \
+            "email_client_api/memailmailbox.h               APP_LAYER_PLATFORM_EXPORT_PATH(memailmailbox.h)" \
+            "email_client_api/memailmessage.h               APP_LAYER_PLATFORM_EXPORT_PATH(memailmessage.h)" \
+            "email_client_api/memailfolder.h                APP_LAYER_PLATFORM_EXPORT_PATH(memailfolder.h)" \
+            "email_client_api/memailaddress.h               APP_LAYER_PLATFORM_EXPORT_PATH(memailaddress.h)" \
+            "email_client_api/memailcontent.h               APP_LAYER_PLATFORM_EXPORT_PATH(memailcontent.h)" \
+            "email_client_api/memailmessagesearch.h         APP_LAYER_PLATFORM_EXPORT_PATH(memailmessagesearch.h)" \
+            "email_client_api/mmailboxsyncobserver.h        APP_LAYER_PLATFORM_EXPORT_PATH(mmailboxsyncobserver.h)" \
+            "email_client_api/mmailboxcontentobserver.h     APP_LAYER_PLATFORM_EXPORT_PATH(mmailboxcontentobserver.h)"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/emailapidefs.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,158 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email Client API definitions
+*
+*/
+
+#ifndef __EMAILAPIDEFS
+#define __EMAILAPIDEFS
+
+#include <e32base.h>
+#include <f32file.h>
+
+namespace EmailInterface {
+
+/**
+* Id for message, message part, folder and mailbox entries
+*/
+typedef TUint TEntryId;
+
+/**
+* Interface id. Each implementation of MEmailInterface has unique id value.
+*/
+typedef TInt TEmailTypeId;
+
+const TEntryId KUndefinedEntryId = 0;
+
+/**
+ * base interface for all email interfaces available to clients
+ * @since S60 v5.0
+ */
+class MEmailInterface
+{
+public:
+    /** returns interface id (kind of RTTI) */
+    virtual TEmailTypeId InterfaceId() const = 0;
+
+    /** frees memory allocated by interface impl. */    
+    virtual void Release() = 0;
+};
+
+/**
+ * Defines abstraction for entry ID. Used by message, folder, mailbox etc types.
+ * @since S60 v5.0
+ */
+class TBaseId
+{
+public:
+    inline TBaseId() : iId( KUndefinedEntryId ){}
+    inline TBaseId( TEntryId aId ) : iId( aId ){}
+    
+    TEntryId   iId;
+};
+
+/**
+ * Defines mailbox ID
+ * @since S60 v5.0
+ */
+class TMailboxId : public TBaseId  
+{
+public:
+    inline TMailboxId() : 
+        TBaseId(){}
+    inline TMailboxId( TEntryId aId ) : TBaseId( aId ){}
+    inline TBool operator==( const TMailboxId& aMailboxId ) const {
+        return ( aMailboxId.iId == iId ); }
+};
+
+/**
+ * Defines folder ID which is associated with a mailbox
+ * @since S60 v5.0
+ */
+class TFolderId : public TBaseId
+{
+public:
+    // parent mailbox
+    TMailboxId iMailboxId;
+    inline TFolderId( TEntryId aId, const TMailboxId& aMailboxId ) : 
+        TBaseId( aId ),iMailboxId( aMailboxId.iId ){}
+        
+    inline TFolderId() : TBaseId(), iMailboxId() {}
+    
+    inline TBool operator==( const TFolderId& aFolderId ) const {
+        return ( iMailboxId.iId == aFolderId.iMailboxId.iId &&
+        iId == aFolderId.iId ); }
+        
+    inline TBool operator!=( const TFolderId& aFolderId ) const {
+        return !( aFolderId == *this ); }
+};
+
+/**
+ * Defines email message ID which is associated with a mailbox and folder
+ * @since S60 v5.0
+ */
+class TMessageId : public TBaseId
+{
+public:
+    inline TMessageId() : TBaseId(), iFolderId(){}
+    
+    inline TMessageId( TEntryId aMsgId, TEntryId aFolderId, TMailboxId aMailboxId ) : 
+    TBaseId( aMsgId ), iFolderId( aFolderId, aMailboxId ){}
+
+    inline TBool operator==( const TMessageId& aMessageId ) const {
+        return ( iFolderId == aMessageId.iFolderId &&
+        iId == aMessageId.iId ); }
+        
+    inline TBool operator!=( const TMessageId& aMessageId ) const {
+        return !( aMessageId == *this ); }
+    
+    /**
+    * parent folder id.
+    */
+    TFolderId iFolderId;
+};
+
+
+/**
+ * Message content (part) id
+ * @since S60 v5.0
+ */
+class TMessageContentId : public TBaseId
+{
+public:
+    inline TMessageContentId(): TBaseId(), iMessageId() {}
+    
+    inline TMessageContentId( TEntryId aContentId, TEntryId aMsgId, TEntryId aFolderId, TMailboxId aMailboxId ) : 
+    TBaseId( aContentId ), iMessageId( aMsgId, aFolderId, aMailboxId ){}
+    
+    inline TBool operator==( const TMessageContentId& aContentId ) const {
+        return ( iMessageId == aContentId.iMessageId &&
+        iId == aContentId.iId ); }
+        
+    inline TBool operator!=( const TMessageContentId& aContentId ) const {
+        return !( aContentId == *this ); }
+    
+    // parent message
+    TMessageId iMessageId;
+};
+
+typedef RArray<TMessageId> REmailMessageIdArray;
+
+typedef RArray<TFolderId>  REmailFolderIdArray;
+
+typedef RArray<TMailboxId>     REmailMailboxIdArray;
+
+} // EmailInterface
+
+#endif // __EMAILAPIDEFS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/emailclientapi.hrh	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface IDs for sub interfaces
+*
+*/
+
+#ifndef __EMAILCLIENTAPI_HRH
+#define __EMAILCLIENTAPI_HRH
+
+// ECom interface UID for email API
+#define KEmailClientFactoryApiUid 0x20022D62
+
+
+// Interface ids (not ECom) for accessing "sub interfaces" via
+// MEmailInterface* CEmailInterfaceFactory::InterfaceL( const TInt aInterfaceId )
+// to be checked if all should be published to clients (some are not
+// meant to be instantiated via factory method but by other means, e.g. 
+// user never instantiates mailbox from scratch but asks it from MEmailClientApi
+
+#define KEmailClientApiInterface 0x20022D63
+#define KEmailIFUidMailbox 0x20022D64
+#define KEmailIFUidMessage 0x20022D65
+#define KEmailIFUidFolder 0x20022D66
+#define KEmailIFUidAddress 0x20022D67
+#define KEmailIFUidMessageContent 0x20022D68
+#define KEmailIFUidSearch 0x20022D69
+#define KEmailIFUidTextContent 0x20022D6B
+#define KEmailIFUidMessageIterator 0x20022D6C
+#define KEmailIFUidMultipart 0x20022D6D
+#define KEmailIFUidAttachment 0x20022D6E
+
+
+#endif // __EMAILCLIENTAPI_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/emailinterfacefactory.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ECom interface for Email Client API
+*
+*/
+
+
+#ifndef CEMAILINTERFACEFACTORY_H
+#define CEMAILINTERFACEFACTORY_H
+
+#include <e32base.h>
+#include <ecom/ecom.h>
+#include <memailclientapi.h>
+#include <memailcontent.h>
+
+namespace EmailInterface {
+    
+/**
+ * ECom factory class for Email Client API.
+ * @since S60 v5.0
+ * 
+ */
+NONSHARABLE_CLASS( CEmailInterfaceFactory ) : public CBase
+{
+public:       
+        
+    /**
+     * Contructor
+     * @return factory for creating interface instances.
+     */
+    inline static CEmailInterfaceFactory* NewL();
+    
+    /**
+    * destructor
+    */
+    inline ~CEmailInterfaceFactory();
+    
+    /**
+    * Returns email interface pointer by id
+    * @param aInterfaceId interface id, see emailclientapi.hrh for available ids
+    * @return pointer to interface
+    * @exception KErrNotFound if unkown interface id is given
+    *
+    * @code
+    
+     #include <emailinterfacefactory.h>
+    
+     using namespace EmailInterface;
+     
+     CEmailInterfaceFactory* factory = CEmailInterfaceFactory::NewL();
+     CleanupStack::PushL( factory );
+     MEmailInterface* ifPtr = factory->InterfaceL( KEmailClientApiInterface );
+     MEmailClientApi* clientApi = static_cast<MEmailClientApi*>( ifPtr );
+     CleanupReleasePushL( *clientApi );
+     // <do something with clientApi...>
+     CleanupStack::PopAndDestroy( 2 ); // clientApi and factory
+     @endcode
+    * 
+    */
+    virtual EmailInterface::MEmailInterface* InterfaceL(  
+        const TInt aInterfaceId ) = 0;
+
+private:
+    
+        // Unique instance identifier key
+        TUid iDtor_ID_Key;
+};
+
+    
+/**
+ * Cleanup support for pointer arrays with MEmailInterface elements which are 
+ * destroyed with Release() method.
+ * @since S60 v5.0
+   @code
+       using namespace EmailInterface;
+ 
+       RMailboxPtrArray mailboxes; // array of MEmailMailbox pointers
+       // note: PushL can take any pointer array of elements with Release()
+       // method
+       CleanupResetAndRelease<MEmailMailbox>::PushL( mailboxes );
+      // <here some code that might leave>
+       mailClient->GetMailboxesL( mailboxes );
+ 
+       // MEmailMailbox::Release() called for each array element and then
+       // mailboxes.Reset() is called 
+       CleanupStack::PopAndDestroy();  
+   @endcode
+ */
+template<class T>
+NONSHARABLE_CLASS( CleanupResetAndRelease )
+{
+public:
+    /**
+     * Cleanup for elements containing Release() method  
+     */
+    inline static void PushL( RPointerArray<T>& aItem );
+
+    /**
+     * Releases array elements and resets array.
+     */
+    inline static void ResetAndRelease( TAny* aPtr );  
+};
+
+#include "emailinterfacefactory.inl"
+
+} // namespace EmailInterface
+
+#endif // CEMAILINTERFACEFACTORY_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/emailinterfacefactory.inl	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ECom interface for email interface factory inline implementation
+*
+*/
+
+#include "emailclientapi.hrh"
+
+// LOCAL FUNCTIONS
+
+inline void ResetAndDestroyCleanup( TAny* aAny )
+    {
+    RImplInfoPtrArray* ptrArray = reinterpret_cast<RImplInfoPtrArray*>( aAny );
+    ptrArray->ResetAndDestroy();
+    }
+
+inline void CleanupResetAndDestroyPushL( RImplInfoPtrArray& aArray )
+    {
+    TCleanupItem item( &ResetAndDestroyCleanup, &aArray );
+    CleanupStack::PushL( item );
+    }
+
+// ============================= MEMBER FUNCTIONS =============================
+
+// ----------------------------------------------------------------------------
+// CEmailInterfaceFactory::NewL
+// Two-phased constructor
+// ----------------------------------------------------------------------------
+//
+inline CEmailInterfaceFactory* CEmailInterfaceFactory::NewL( )
+    {
+    // Find implementation for our interface.
+    RImplInfoPtrArray implArray;
+    EmailInterface::CleanupResetAndDestroyPushL( implArray );
+    const TUid ifUid = {KEmailClientFactoryApiUid};
+    REComSession::ListImplementationsL(
+                            ifUid,
+                            implArray );
+    // there should be only one impl so take first
+    TAny* interface = NULL;
+    if ( implArray.Count() )
+        {
+        const TUid uid = implArray[0]->ImplementationUid();        
+        interface = REComSession::CreateImplementationL( 
+            uid, _FOFF( CEmailInterfaceFactory, iDtor_ID_Key ) );
+        }
+    CleanupStack::PopAndDestroy(); // implArray
+        
+    return reinterpret_cast<CEmailInterfaceFactory*>( interface );
+    }
+
+// ----------------------------------------------------------------------------
+// CEmailInterfaceFactory::~CEmailInterfaceFactory
+// Destructor
+// ----------------------------------------------------------------------------
+//
+inline CEmailInterfaceFactory::~CEmailInterfaceFactory()
+    {
+    REComSession::DestroyedImplementation( iDtor_ID_Key );
+    }
+
+template<class T>
+inline void CleanupResetAndRelease<T>::PushL( RPointerArray<T>& aItem ) { 
+     TCleanupItem item( &CleanupResetAndRelease<T>::ResetAndRelease, &aItem );
+     CleanupStack::PushL( item );
+ }
+template<class T>
+inline void CleanupResetAndRelease<T>::ResetAndRelease( TAny* aPtr )
+     {
+     RPointerArray<T>* array = reinterpret_cast<RPointerArray<T>* >( aPtr );
+     for ( TInt i = 0; i < array->Count(); i++ )
+         {
+         T* item = (*array)[i];
+         item->Release();
+         }
+     array->Reset();
+     }
+
+// End Of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/emailsorting.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email Client sort criteria definition
+*
+*/
+
+#ifndef EMAILSORTING
+#define EMAILSORTING
+
+#include <e32base.h>
+
+namespace EmailInterface {
+
+/**
+* Sort criteria used in searching messages with MEmailMessageSearchAsync 
+* declared in memailmessagesearch.h.
+*/
+class TEmailSortCriteria
+{
+public:
+    /**
+    * Fields for sort criteria
+    */
+    enum TSortField {
+        EDontCare,
+        EByDate,
+        EBySender,
+        EByRecipient,
+        EBySubject,
+        EByPriority,
+        EByFlagStatus,
+        EByUnread,
+        EBySize,
+        EByAttachment,
+    };
+    
+    // is ascending sort order
+    TBool iAscending;
+    
+    // sort by field
+    TSortField iField; 
+
+    inline TEmailSortCriteria() : iAscending( ETrue ), iField( EDontCare ) {}
+};
+
+typedef RArray<TEmailSortCriteria> RSortCriteriaArray;
+
+} // EmailInterface
+
+#endif // EMAILSORTING
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailaddress.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email address in Email Client API
+*
+*/
+
+#ifndef MEMAILADDRESS_H
+#define MEMAILADDRESS_H
+
+#include <emailapidefs.h>
+
+namespace EmailInterface {
+
+/**
+ * Email address that is used as recipient or sender in MEmailMessage and
+ * mailbox address in MEmailMailbox.
+ * @since S60 v5.0
+ */
+class MEmailAddress : public MEmailInterface
+{ 
+public:
+    /**
+     * Association role of the address in message/mailbox.
+     */
+    enum TRole { 
+        // role is undefined
+        EUndefined, 
+        // reply-to address in a message
+        EReplyTo, 
+        // sender of a message
+        ESender, 
+        // to-recipient of a message
+        ETo, 
+        // cc-recipient of a message
+        ECc, 
+        // bcc-recipient of a message
+        EBcc };
+    
+    /**
+     * Sets email address
+     * @param email address 
+     */
+    virtual void SetAddressL( const TDesC& aAddress ) = 0;
+    
+    /**
+     * Returns email address
+     * @return email address
+     */
+    virtual TPtrC Address() const = 0;
+    
+    /**
+     * Sets display name for the address
+     * @param display name
+     */
+    virtual void SetDisplayNameL( const TDesC& aDisplayName ) = 0;
+    
+    /**
+     * Returns display name for the address
+     * @return display name
+     */
+    virtual TPtrC DisplayName() const = 0;
+    
+    /**
+     * Returns role associated with the address
+     * @return role
+     */
+    virtual TRole Role() const = 0;
+    
+    /**
+     * Sets role
+     * @param role
+     */
+    virtual void SetRole( const TRole aRole ) = 0;
+};
+
+typedef RPointerArray<MEmailAddress>    REmailAddressArray;
+
+} // namespace EmailInterface {
+
+#endif // MEMAILADDRESS_H
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailclientapi.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ECom interface for Email Client API
+*
+*/
+
+
+#ifndef MEMAILCLIENTAPI_H
+#define MEMAILCLIENTAPI_H
+
+#include <emailapidefs.h>
+
+namespace EmailInterface {
+
+class MEmailMailbox;
+
+
+typedef RPointerArray<MEmailMailbox> RMailboxPtrArray;
+
+/**
+ * Email client main interface for accessing mailboxes and launching
+ * email editor and viewer.
+ * Use CEmailInterfaceFactory::InterfaceL( KEmailClientApiInterface )
+ * to get instance. Use Release() (from MEmailInterface) when the instance 
+ * is no more needed.
+ * 
+ */
+class MEmailClientApi : public MEmailInterface
+{
+public:
+    
+    /** returns mailbox by id, ownership transferred */
+    virtual MEmailMailbox* MailboxL( const TMailboxId& aId ) = 0;
+    
+    /** 
+     * Conveninence method for accessing mailbox by own addresss.
+     */
+    virtual MEmailMailbox* MailboxL( const TPtrC& aAddress ) = 0;
+        
+    /**
+    * Gets all mailboxes in pointer array. It is recommended to free other
+    * mailboxes besides needed one to optimise memory usage.
+    */    
+    virtual TInt GetMailboxesL( RMailboxPtrArray& aMailboxes ) = 0;
+
+    /**
+    * Launch policy defines behavior when launching email application
+    */
+    enum TLaunchPolicy {
+        // Launch email application as from menu application by the user
+        EDefault,
+        // Shows inbox with unseen messages. If there are no unseen messages
+        // behavior is same as EDefault. This one is not currently supported.
+        EShowLastUnseenMailbox
+    };
+    /**
+     * Launches Email application with defined launch behavior
+     * The method follows "fire and forget" pattern, returns immediately.
+     * @param aPolicy defines behavior for app launch
+     */
+    virtual void LaunchEmailL( const TLaunchPolicy aPolicy ) = 0;
+
+};
+
+}  // namespace EmailInterface
+
+#endif // MEMAILCLIENTAPI_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailcontent.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,289 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ECom interface for Email Client API
+*
+*/
+
+#ifndef MEMAILCONTENT_H
+#define MEMAILCONTENT_H
+
+#include <emailapidefs.h>
+
+namespace EmailInterface {
+
+_LIT( KContentTypeTextPlain, "text/plain" );
+_LIT( KContentTypeTextHtml, "text/html" );
+
+class MEmailOperationObserver;
+class MEmailAttachment;
+class MEmailMultipart;
+class MEmailTextContent;
+class MEmailMessageContent;
+
+/**
+* Callback interface used for content fetching asynchronously.
+* Object deriving this interface is passed to MEmailMessageContent::FetchL
+* @since S60 v5.0
+*/
+class MEmailFetchObserver
+{
+public:
+    /** Content fetched
+    * @param operation result 
+    */
+    virtual void DataFetchedL( const TInt aResult ) = 0;
+};
+
+typedef RPointerArray<MEmailMessageContent> REmailContentArray;
+
+/**
+* Base interface for mime message parts.
+* @since S60 v5.0
+*/
+class MEmailMessageContent : public MEmailInterface
+{
+public:
+    /** numeric identifier of message content */
+    virtual TMessageContentId Id() const = 0;
+
+// fields as per RFC 2045
+    /**
+     * return sContent-Type field value
+     */
+    virtual TPtrC ContentType() const = 0;
+
+    /**
+     * sets value of Content-Type field
+     * @param content type
+     */
+    virtual void SetContentType( const TDesC& aContentType ) = 0;
+
+    /**
+    /* Returns Content-ID field value.
+     * @return content id
+     */
+    virtual TPtrC ContentId() const = 0;
+
+    /**
+     * Sets value of Content-ID field
+     * @param content id
+     */
+    virtual void SetContentId( const TDesC& aContentId ) = 0;
+
+    /**
+     * Returns value of content-description field
+     * @return content description 
+     */
+    virtual TPtrC ContentDescription() const = 0;
+
+    /**
+     * Sets value of content description field
+     * @param content description 
+     */
+    virtual void SetContentDescription( const TDesC& aContentDescription ) = 0;
+
+    /**
+     * Returns value of content disposition field
+     * @return content disposition
+     */
+    virtual TPtrC ContentDisposition() const = 0;
+
+    /**
+     * Sets value of content-disposition field
+     * @param content disposition
+     */
+    virtual void SetContentDisposition( const TDesC& aContentDisposition ) = 0;
+
+// end of standard  RFC 2045 fields
+
+    /**
+     * returns Content-class field value (non-standard)
+     */
+    virtual TPtrC ContentClass() const = 0;
+
+    /**
+     * Sets value of Content-class field (non-standard)
+     * @param content class
+     */
+    virtual void SetContentClass( const TDesC& aContentClass ) = 0;
+
+    /**
+     * Available (=fetched) size accessor. If this is less than value from
+     * TotalSize(), Fetch() should be used to retrieve more data from
+     * remote mail server.
+     * @return fetched size of the data.
+     */
+    virtual TInt AvailableSize() const = 0;
+
+    /**
+     * Total size accessor
+     * @return total size of message text.
+     */
+    virtual TInt TotalSize( ) const = 0;
+
+    /**
+     * Returns pointer descriptor to content data
+     */
+    virtual TPtrC ContentL() const = 0;
+
+    /**
+     * Sets content data.
+     */
+    virtual void SetContentL( const TDesC& aContent ) = 0;
+
+    /**
+     * Starts fetching rest of content asynchronously.
+     *
+     * If available size after fetch is smaller than total size, next chunk can
+     * be fetched with new invocatin of Fetch method.
+     *
+     * Calling Release() implicitly cancels fetching.
+     * @param aObserver called when when fetch completes.
+     * @exception KErrInUse if fetch is ongoing
+     */
+    virtual void FetchL( MEmailFetchObserver& aObserver ) = 0;
+
+    /**
+     * Cancels fetch operation, observer is not called
+     */
+    virtual void CancelFetch() = 0;
+
+    /**
+     * Stores message content to a file
+     */
+    virtual void SaveToFileL( const TDesC& aPath ) = 0;
+
+    /**
+     * Typesafe multipart accessor for obtaining MEmailMultipart pointer
+     * to this object.
+     * @param content as multipart or NULL if content is not multipart
+     */
+    virtual MEmailMultipart* AsMultipartOrNull() const = 0;
+
+    /**
+     * Typesafe text content accessor for obtaining MEmailTextContent pointer
+     * to this object.
+     * @param content as text content or NULL if content is not text
+     */
+    virtual MEmailTextContent* AsTextContentOrNull() const = 0;
+
+    /**
+     * Typesafe attachment content accessor for obtaining MEmailAttachment pointer
+     * to this object.
+     * @param content as attachment content or NULL if content is not an attachment
+     */
+    virtual MEmailAttachment* AsAttachmentOrNull() const = 0;
+};
+
+/**
+* Convenience abstraction for manipulating plain or html text content. Use
+* CEmailInterfaceFactory::InterfaceL( KEmailIFUidTextContent ) to make new
+* instance of this interface.
+* @since S60 v5.0
+*/
+class MEmailTextContent : public MEmailMessageContent
+{
+public:
+    /**
+     * Text (content) type 
+     */
+    enum TTextType {
+        EPlainText, // text/plain
+        EHtmlText   // text/html
+    };
+
+    /**
+    * Tells if content has specified type of text.
+    */
+    virtual TTextType TextType() const = 0;
+
+    /**
+    * Sets (replaces) text to message content. Possible old content is
+    * deleted. Content type is set to "text/plain" or "text/html" based on
+    * specified text type.
+    * @param aPlainOrHtml sub-type of the text
+    * @param aText content of the message part
+    */
+    virtual void SetTextL(
+        const TTextType aPlainOrHtml,
+        const TDesC& aText ) = 0;
+};
+
+/**
+* Message part with multiple sub parts. If MEmailMessage::ContentL returns
+* content with type "multipart/*" (where '*' is a character sequence) it can
+* safely be casted to MEmailMultipart
+* @since S60 v5.0
+*/
+class MEmailMultipart : public MEmailMessageContent
+{
+public:
+    /**
+    * Returns number of child parts
+    */
+    virtual TInt PartCountL() = 0;
+
+    /**
+    * Returns a child part, ownership is transferred.
+    * @param aIndex part to return, leaves KErrArgument if out of bounds
+    */
+    virtual MEmailMessageContent* PartByIndexL( const TUint aIndex ) const = 0;
+
+    /**
+    * Deletes part by index.
+    * @param aIndex part to delete, leaves KErrArgument if out of bounds
+    */
+    virtual void DeletePartL( const TUint aIndex ) = 0;
+
+    /**
+    * Adds message part, ownership is transferred.
+    * @param aPart any object derived from MEmailMessageContent
+    * @param aPos position among child parts
+    */
+    virtual void AddPartL(
+        const MEmailMessageContent& aPart,
+        const TUint aPos ) = 0;
+};
+
+typedef RPointerArray<MEmailAttachment> REmailAttachmentArray;
+
+/**
+* Email attachment interface
+* Attachment is created with MEmailMessage::AddAttachmentL()
+* @since S60 v5.0
+*/
+class MEmailAttachment : public MEmailMessageContent
+{
+public:
+      /**
+      * Returns file handle of this attachment. If the attachment is
+      * not associated with a file, null file handle is returned.
+      */
+      virtual RFile FileL() const = 0;
+
+      /**
+      * Sets file name field
+      */
+      virtual void SetFileNameL( const TDesC& aFileName ) = 0;
+
+      /**
+      * Returns file name or null pointer descriptor if attachment
+      * is not associated with any file
+      */
+      virtual TPtrC FileNameL() const = 0;
+};
+
+} // namespace EmailInterface
+
+#endif // MEMAILCONTENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailfolder.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email message API
+*
+*/
+
+#ifndef _M_EMAILFOLDER
+#define _M_EMAILFOLDER
+
+#include <emailapidefs.h>
+#include <emailsorting.h>
+
+namespace EmailInterface {
+
+class MEmailFolder;
+class MMessageIterator;
+
+typedef  RPointerArray<MEmailFolder> RFolderArray;
+
+/**
+* folder types
+*/
+enum TFolderType
+    {
+    EInbox,
+    EOutbox,
+    EDrafts,
+    EDeleted,
+    ESent,
+    EOther
+    };
+
+/**
+* Email folder interface 
+* This is used for accessing folder information and included messages.
+* Operations affecting folder itself are not provided.
+*
+* Use case: for accessing messages in specific folder use MEmailMessageQuery
+* and set folder id with MEmailMessageQuery::SetFolderIdL()
+*
+* @since S60 v5.0
+*/
+class MEmailFolder : public MEmailInterface
+{
+public:
+    /**
+    * Returns folder id.
+    * @return folder type
+    */
+    virtual TFolderId FolderId() const = 0;
+    
+    /**
+    * Returns parent folder id.
+    * @return parent folder id
+    */
+    virtual TFolderId ParentFolderId() const = 0;
+    
+    /**
+    * Returns folder type.
+    * @return folder type
+    */
+    virtual TFolderType FolderType() const = 0;    
+
+    /**
+    * Returns folder name.
+    * @return folder name pointer descriptor
+    */
+    virtual TPtrC Name() const = 0;
+
+    /**
+    * Returns direct children of this folder, i.e. this is not recursive.
+    * @return number of subfolders or an error code
+    */    
+    virtual TInt GetSubfoldersL( 
+        RFolderArray& aSubfolders ) const = 0;
+
+    /**
+    * Returns message iterator for iterating messages in the folder
+    * @param aSortCriteria sort criteria
+    * @return message iterator
+    */
+    virtual EmailInterface::MMessageIterator* MessagesL( 
+        const RSortCriteriaArray& aCriteria ) = 0;
+    
+    /**
+    * Deletes messages in this folder
+    * @param aMessageIds messages to delete. This method is no-op if
+    * array is empty. It is expected that messages in the array are
+    * located in same folder or KErrArgument exception is raised.
+    */
+    virtual void DeleteMessagesL( const REmailMessageIdArray& aMessageIds ) = 0;
+};
+
+} // namespace EmailInterface
+
+#endif // _M_EMAILFOLDER
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailmailbox.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email message API
+*
+*/
+
+#ifndef MEMAILMAILBOX_H
+#define MEMAILMAILBOX_H
+
+#include <memailfolder.h>
+
+namespace EmailInterface {
+
+class MEmailAddress;
+class MEmailMessage;
+class MMailboxContentObserver;
+class MEmailMessageSearchAsync;
+class MMailboxSyncObserver;
+
+/**
+* Email mailbox interface.
+* MEmailMailbox cannot be instantiated with factory method. Use
+* MEmailClientApi::MailboxL to obtain a configured mailbox.
+* @since S60 v5.0
+*/
+class MEmailMailbox : public MEmailInterface
+{
+public:
+    /**
+    * Returns mailbox identifier
+    * @return mailbox id
+    */
+    virtual TMailboxId MailboxId() const = 0;
+
+    /**
+    * Returns own address of the mailbox. Role is set to ESender
+    * @return address, ownership not transferred
+    */
+    virtual MEmailAddress* AddressL() const = 0;
+
+    /**
+    * Returns mailbox name
+    * @return mailbox name
+    */
+    virtual TPtrC MailboxName() const = 0;
+
+    /** returns root level folders of this mailbox, to get subfolders of specific
+     * folder, use MEmailFolder::GetSubfolders
+     * @param aFolders pointer array of folders, ownership of folders is
+     * transferred
+     * @return number of folders in aFolders or Symbian OS error code
+     */
+    virtual TInt GetFoldersL( RFolderArray& aFolders ) const = 0;
+
+    /**
+    * Returns folder by folder id
+    * @param folder id
+    * @return pointer to folder, ownership is transferred
+    */
+    virtual MEmailFolder* FolderL( const TFolderId& aFolderId ) const = 0;
+
+    /**
+    * Returns folder by type
+    * @param type other than EOther because it is ambiguous
+    * @return pointer to folder, ownership is transferred
+    * @exception KErrNotFound if folder of requested type is not found
+    */
+    virtual MEmailFolder* FolderByTypeL(
+        const TFolderType aFolderType ) const = 0;
+
+    /**
+    * Returns existing message in this mailbox.
+    * @param aMessageId a message id returned by GetMessagesIdsL()
+    * @return new message object, ownership transferred.
+    * @exception
+    */
+    virtual MEmailMessage* MessageL( const TMessageId& aMessageId ) = 0;
+
+    /**
+     * Creates new message in 'drafts' folder. Ownership is transferred
+     * @return new draft message
+     */
+    virtual MEmailMessage* CreateDraftMessageL() const = 0;
+
+    /**
+     * Creates reply message. Ownership is transferred
+     * @param aMessageId original message
+     * @param aReplyToAll If ETrue, all recipients of the original message are
+     *        added to reply message.
+     * @return new draft message
+     */
+    virtual MEmailMessage* CreateReplyMessageL(
+        const TMessageId& aMessageId,
+        const TBool aReplyToAll = ETrue ) const = 0;
+
+    /**
+     * Creates forward message. Ownership is transferred
+     * @param aMessageId original message
+     * @return new draft message
+     */
+    virtual MEmailMessage* CreateForwardMessageL(
+        const TMessageId& aMessageId ) const = 0;
+
+    /**
+     * Starts synchronising this mailbox
+     * @param aObserver observer called back when sync is complete
+     */
+    virtual void SynchroniseL( MMailboxSyncObserver& aObserver ) = 0;
+
+    /**
+     * Cancels mailbox synchronisation.
+     */
+    virtual void CancelSynchronise() = 0;
+
+    /**
+    * Returns interface for searching messages from this mailbox. Ownership
+    * is transferred.
+    * @return message search interface pointer
+    */
+    virtual MEmailMessageSearchAsync* MessageSearchL() = 0;
+
+    /**
+     * Launches Email application and shows inbox.
+     * The method follows "fire and forget" pattern, returns immediately.
+     */
+    virtual void ShowInboxL() = 0;
+
+    /** Launches email editor and returns immediately.
+     * The method follows "fire and forget" pattern, returns immediately.
+     */
+    virtual void EditNewMessageL() = 0;
+    
+    /** Register mailbox observer 
+     * @param aObserver observer called back when changes in mailbox (new message,
+     * messages changes or messages deleted).
+     * */
+    virtual void RegisterObserverL( MMailboxContentObserver& aObserver ) = 0;
+        
+    /** 
+     * Unregister mailbox observe.r 
+     */
+    virtual void UnregisterObserver( MMailboxContentObserver& aObserver ) = 0;
+
+};
+
+} // namespace EmailInterface
+
+#endif // MEMAILMAILBOX_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailmessage.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email message API
+*
+*/
+
+#ifndef MEMAILMESSAGE_H
+#define MEMAILMESSAGE_H
+
+#include <emailapidefs.h>
+#include <memailaddress.h>
+#include <memailcontent.h>
+
+namespace EmailInterface {
+
+class MEmailMessageContent;
+class MEmailAttachment;
+
+/** message flags */  
+enum TMsgFlag
+    {
+    EFlag_Read = 1,                 // Message is read (or "seen") on the server
+    EFlag_Read_Locally = 2,         // Message is read on the client
+    EFlag_Low = 4,                  // Message has low priority
+    EFlag_Important = 8,            // Message has high priority
+    EFlag_FollowUpComplete = 16,    // The message follow-up is complete
+    EFlag_FollowUp = 32,            // Message is flagged (a flag is showing next to msg in Outlook)
+    EFlag_Attachments = 64,         // Message has attachments
+    EFlag_Multiple = 128,           // Message has more than one recipient
+    EFlag_CalendarMsg = 256,        // Message is a calendar message
+    EFlag_Answered = 512,           // The message was replied to
+    EFlag_Forwarded = 1024,         // The message was forwarded
+    EFlag_OnlyToMe = 2048,          // The message was sent only to this user
+    EFlag_RemoteDeleted = 4096,     // The message has been deleted on the server
+    EFlag_HasMsgSender = 8192,      // The message has one or more senders 
+    };
+/**
+ * MEmailMessage is email message abstraction
+ * @since S60 v5.0
+   @code
+     Create and send a message with attachment:
+ 
+     using namespace EmailInterface;
+     CEmailInterfaceFactory* factory = CEmailInterfaceFactory::NewL();
+     CleanupStack::PushL( factory );
+     MEmailClientApi* emailAPI = factory->InterfaceL( KEmailTypeClientAPI );
+     CleanupReleasePushL( *emailAPI );
+     RMailboxPtrArray mailboxes;
+     // Cleanup for array containing mailbox pointers, 
+     // calls MEmailMailbox::Release() on cleanup.
+     CleanupResetAndRelease<MEmailMailbox>::PushL( mailboxes );
+     if ( emailAPI->GetMailboxesL( mailboxes ) > 0 ) // at least one found
+         {
+         MEmailMailbox* mailbox = mailboxes[0];
+         MEmailMessage* message = mailbox->CreateDraftMessageL();
+         CleanupReleasePushL( *message );
+         message->SetPlainTextBodyL( _L("So say we all!") );
+         message->AddAttachmentL( _L( "BSG.png" ) ); 
+         message->SendL();
+         CleanupStack::PopAndDestroy(); // message
+         }    
+    CleanupStack::PopAndDestroy( 3 ); // mailboxes, emailAPI, factory
+  @endcode
+  *
+  */
+class MEmailMessage : public MEmailInterface
+{
+public:
+    /**
+     * Returns message id
+     * @return message id
+     */
+    virtual const TMessageId& MessageId() const = 0;
+ 
+    /** 
+     * Returns sender address, ownership is not transferred
+     * Setting role to MEmailAddress::EUndefined marks sender field "undefined"
+     */
+    virtual MEmailAddress* SenderAddressL() const = 0;        
+        
+    /**
+     * Returns reply-to address (NULL for newly created draft message).
+     * Ownership is not transferred. Setting role to MEmailAddress::EUndefined 
+     * marks reply-to field "undefined".
+     */    
+    virtual MEmailAddress* ReplyToAddressL() const = 0;
+    
+    /**
+     * Sets reply-to address, note that role of the address is ignored.
+     * Ownership is not transferred.
+     */
+    virtual void SetReplyToAddressL( const MEmailAddress& aSender ) = 0;       
+        
+    /**
+     * Returns recipients. Ownership is transferred.
+     * @param aRole, if EUndefined - returns to,cc and bcc recipients in that order
+     * @return number of recipients returned in array
+     * @exception returns KErrArgument if aRole is EReplyTo or ESender
+     */    
+    virtual TInt GetRecipientsL( const MEmailAddress::TRole aRole,
+        REmailAddressArray& aRecipients ) const = 0;
+    
+    /**
+     * Sets and replaces recipients of specific type.
+     * @param aRole to, cc or bcc, for other types leave KErrArgument
+     * @return recipient added to this message. Ownership is not transferred.
+     */
+    virtual void SetRecipientsL( const MEmailAddress::TRole aRole, REmailAddressArray& aRecipients ) = 0;    
+    
+    /** removes recipient from the message
+     * @param aRecipient that has been obtained by GetRecipients().
+     * Comparison of recipients and aRecipient is done based on 
+     * MEmailAddress::Address() and MEmailAddress::Role().
+     * @exception KErrNotFound if aRecipient doesn't match with existing 
+     * recipients.
+     */
+    virtual void RemoveRecipientL( const MEmailAddress& aRecipient ) = 0;
+    
+    /**
+     * Returns subject
+     * @return subject of the message
+     */
+    virtual TPtrC Subject() const = 0;
+
+    /**
+     * Sets subject
+     * @param subject of the message 
+     */
+    virtual void  SetSubjectL( const TPtrC& aSubject) = 0;    
+    
+    /**
+     * Returns date and time of the message.
+     * @return message date/time 
+     */
+    virtual TTime Date() const = 0;
+
+    /**
+     * Returns message flags
+     * @return message flags
+     */
+    virtual TInt Flags() const = 0;
+    
+    /**
+     * Sets a message flag
+     * @param flag to set
+     */
+    virtual void SetFlag( const TUint aFlag ) = 0;
+    
+    /**
+     * Resets a message flag to zero
+     * @param flag to reset
+     */
+    virtual void ResetFlag( const TUint aFlag ) = 0;
+
+// content
+    /**      
+     * Returns message body
+     * Returns pointer to message content, ownership not transferred.
+     * Actual type is MEmailTextContent, or MEmailMultipart (see memailcontent.h)
+     * @return content of the message or NULL if content has not been set
+     */    
+    virtual MEmailMessageContent* ContentL() const = 0;
+
+    /**
+     * Sets content to this message. First create content object, e.g.
+     * CEmailInterfaceFactory::InterfaceL( KEmailIFUidTextContent ), i.e. text/plain
+     * @param aContent content to set in the message, ownership is transferred.
+     * possible old content is destroyed if setting new content succeeds.
+     */    
+    virtual void SetContentL( const MEmailMessageContent* aContent ) = 0;
+    
+    /**
+     * Convenience method for setting plain text as message body.
+     * @param aPlainText text/plain content of message body. Old content
+     * is destroyed.
+     */
+    virtual void SetPlainTextBodyL( const TDesC& aPlainText ) = 0;
+
+    /**
+     * Adds attachment to message. This may affect previously set content, e.g.
+     * if SetContentL with MEmailTextContent argument was called, a new multipart
+     * content is created with MEmailTextContent and attachment as child parts.
+     * @param aFullpath path to file 
+     * @return created attachment, ownership is not transferred
+     */
+    virtual MEmailAttachment* AddAttachmentL( const TDesC& aFullPath ) = 0;
+        
+    /**
+     * Adds attachment to message. This may affect previously set content, e.g.
+     * if SetContentL with MEmailTextContent argument was called, a new multipart
+     * content is created with MEmailTextContent and attachment as child parts.
+     * @param file handle to file to be attached. Handle remains open.
+     * @return created attachment, ownership is not transferred
+     */
+    virtual MEmailAttachment* AddAttachmentL( RFile& aFile ) = 0;
+    
+    /**
+     * Returns attachments, ownership is transferred    
+     * @return number of attachments in aAttachments 
+     */
+    virtual TInt GetAttachmentsL( REmailAttachmentArray& aAttachments ) = 0;
+    
+    /**
+     * Remove an attachment, ownership is not transferred. 
+     * @param attachment object obtained with GetAttachmentsL
+     */
+    virtual void RemoveAttachmentL( const MEmailAttachment& aAttachment ) = 0;
+
+    /**
+     * Returns id of parent folder of the message
+     * @return parent folder id
+     */
+    virtual const TFolderId& ParentFolderId() const = 0;
+
+    /** 
+     * Saves changes done with any mutator to persistent store. 
+     */
+    virtual void SaveChangesL() = 0;
+
+    /** 
+     * Moves message to outbox, sending may not happen immediately but
+     * after next mailbox synchronization. Changes done to the message
+     * are first saved before sending as if SaveChangesL was called.
+     * For immediate sending use MEmailMailbox::SynchronizeL()
+     */
+    virtual void SendL() = 0;
+
+    /**
+     * Launches Email application and opens message in viewer
+     * The method follows "fire and forget" pattern, returns immediately.
+     */    
+    virtual void ShowMessageViewerL( ) = 0;
+
+    /** 
+     * Launches Email application and new reply message in editor. 
+     * The method follows "fire and forget" pattern, returns immediately.
+     * @param boolean indicating if reply-to message is sent to all recipients.
+     */
+    virtual void ReplyToMessageL( const TBool aReplyToAll = ETrue ) = 0;   
+
+    /** 
+     * Launches Email application and new forward message in editor
+     * The method follows "fire and forget" pattern, returns immediately.
+     */    
+    virtual void ForwardMessageL() = 0;
+
+};
+
+} // namespace EmailInterface
+
+#endif // MEMAILMESSAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/memailmessagesearch.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ECom interface for Email Client API
+*
+*/
+
+#ifndef __MEMAILACTIONS
+#define __MEMAILACTIONS
+
+#include <e32cmn.h>
+#include <memailmessage.h>
+
+namespace EmailInterface {
+
+class MMessageIterator;
+class TEmailSortCriteria;
+
+/**
+* Observer interface for handling email search results.
+*/
+class MEmailSearchObserver
+{
+public:
+    /**
+     * Called when search has next message available.
+     * This callback is called several times until all results
+     * have been delivered.
+     *
+     * @param message found in search, ownership is transferred.
+     *          
+     */ 
+    virtual void HandleResultL( 
+        MEmailMessage* aMessage ) = 0;
+
+    /**
+     * Notifies that the search has completed and no more results are expected.
+     */
+    virtual void SearchCompletedL() = 0;
+};
+
+/**
+ * Search interface for messages. Results are provided asynchronoysly.
+ * By default all found mailboxes are included in search.
+ * @code
+   
+   MEmailMailbox* mailbox = NULL;
+   // obtain mailbox here... 
+   // ...and now get search interface
+   MEmailMessageSearchAsync* search = mailbox->MessageSearchL();
+   CleanupReleasePushL( *search );
+   TEmailSortCriteria criteria;
+   criteria.iAscending = ETrue;
+   criteria.iField = TEmailSortCriteria::EByDate;                 
+   search->SetSortCriteriaL( criteria );
+   search->StartSearchL( *this ); // this implements MEmailSearchObserver
+   search->Cancel(); // cancel search
+   CleanupStack::PopAndDestroy(); // search
+   
+   @endcode
+   
+ * @since S60 v5.0
+ */
+class MEmailMessageSearchAsync : public MEmailInterface
+{
+public:
+        
+    /**
+    * Sets sort order for search results.
+    * Leaves KErrNotReady if search is ongoing.
+    */
+    virtual void SetSortCriteriaL( const TEmailSortCriteria& aCriteria ) = 0;
+    
+    /**
+    * Adds a search key. Leaves KErrNotReady if search is ongoing.
+    */
+    virtual void AddSearchKeyL( const TDesC& aSearchKey ) = 0;
+                                                                  
+    /**
+    * Enables/disables search from remote email server.
+    * Leaves KErrNotReady if search is ongoing.
+    */
+    virtual void SetRemoteSearchL( TBool aRemote ) = 0;                                                                  
+    
+    /**
+    * Indicates whether remote search is enabled.
+    */
+    virtual TBool IsRemoteSearch() const = 0;
+    
+    /**
+     * Starts search, all methods affecting search attribures leave
+     * KErrNotReady while search is ongoing.
+     * @param aObserver called when results are available.
+     */     
+    virtual void StartSearchL( MEmailSearchObserver& aObserver ) = 0;
+
+    /**
+     * Cancels search.
+     */
+    virtual void Cancel() = 0;
+                                             
+    /** returns search status 
+      * @return search status:
+      *     < 0 : Search has failed
+      *     KRequestPending : search is ongoing. note that status may be
+      *         KRequestPending after HandleResultL callback because results 
+      *         may be given in chunks of results. Size of chunk depends on
+      *         implementation and may vary.
+      *     KErrNone : initial state, or search has finished
+      */
+    virtual TInt Status() const = 0;
+    
+    /**
+     * Resets all search attribures. Cancels search if ongoing. 
+     */
+    virtual void Reset() = 0;
+};
+
+} //EmailInterface
+
+#endif // __MEMAILACTIONS
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/mmailboxcontentobserver.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Observer interface for mailbox events.
+*
+*/
+
+#ifndef MMAILBOXCONTENTOBSERVER_H
+#define MMAILBOXCONTENTOBSERVER_H
+
+#include <emailapidefs.h>
+
+namespace EmailInterface {
+
+class MMailboxContentObserver
+{
+public:
+    virtual void NewMessageEventL( const TMailboxId& aMailbox, const REmailMessageIdArray aNewMessages, const TFolderId& aParentFolderId ) = 0; 
+    
+    virtual void MessageChangedEventL( const TMailboxId& aMailbox, const REmailMessageIdArray aChangedMessages, const TFolderId& aParentFolderId ) = 0;
+    
+    virtual void MessageDeletedEventL( const TMailboxId& aMailbox, const REmailMessageIdArray aDeletedMessages, const TFolderId& aParentFolderId ) = 0;
+};
+
+} // namespace EmailInterface
+
+#endif // MMAILBOXCONTENTOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/mmailboxsyncobserver.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Observer interface for mailbox synchronisation.
+*
+*/
+
+#ifndef MEMAILSYNCOBSERVER_H
+#define MEMAILSYNCOBSERVER_H
+
+#include <emailapidefs.h>
+
+namespace EmailInterface {
+
+class MMailboxSyncObserver
+{
+public:
+    virtual void MailboxSynchronisedL( TInt aResult ) = 0; 
+};
+
+} // namespace EmailInterface
+
+#endif // MEMAILSYNCOBSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/email_client_api/mmessageiterator.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Message iterator interface
+*
+*/
+
+#ifndef MMESSAGEITERATOR_H
+#define MMESSAGEITERATOR_H
+
+#include <emailapidefs.h>
+
+namespace EmailInterface {
+
+class MEmailMessage;
+
+/**
+ * Iterator for email messages. 
+ * @since S60 v5.0
+ */
+class MMessageIterator : public MEmailInterface
+{
+public:
+    /**
+    * Returns next message. When all messages are iterated, returns NULL
+    * @return next message. Ownership is not transferred.
+    */
+    virtual MEmailMessage* NextL() = 0;
+    
+    /**
+    * Returns previous message. When first message is reached, returns NULL
+    * @return previous message. Ownership not is transferred.
+    */
+    virtual MEmailMessage* PreviousL() = 0;
+    
+    /**
+    * Returns amount of messages accessible from the iterator.
+    * @return message count
+    */
+    virtual TUint Count() const = 0;
+    
+};
+
+} // EmailInterface
+
+#endif // MMESSAGEITERATOR_H
--- a/email_plat/email_plat.pro	Fri Jun 11 16:42:02 2010 +0300
+++ b/email_plat/email_plat.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -19,6 +19,7 @@
 
 symbian*: { 
     include(email_services_api/email_services_api.pri)
-
+    include(nmail_settings_api/nmail_settings_api.pri)
     include(nmail_client_api/nmail_client_api.pri)
+    include(email_client_api/email_client_api.pri)
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/nmail_client_api/nmapimessagemanager.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *     Email message related operations
+ */
+
+#ifndef NMAPIMESSAGEMANAGER_H_
+#define NMAPIMESSAGEMANAGER_H_
+
+#include <QObject>
+#include <QList>
+
+#include <nmapidef.h>
+
+struct NmApiMessage;
+class NmApiEmailMessage;
+
+namespace EmailClientApi {
+
+class NmApiFolder;
+class NmApiMessageManagerPrivate;
+
+class NMAPI_EXPORT NmApiMessageManager : public QObject
+{
+    Q_OBJECT
+	
+public:
+    NmApiMessageManager(quint64 mailboxId,QObject *parent = 0);
+
+    virtual ~NmApiMessageManager();
+
+public slots:
+    bool createDraftMessage(const QVariant *initData);
+    
+    bool createForwardMessage(const QVariant *initData);
+    
+    bool createReplyMessage(const QVariant *initData,bool replyAll);
+    
+    bool moveMessages(const QList<quint64> messageIds,
+		quint64 sourceFolderId,quint64 targetFolderId);
+    
+    bool copyMessages(const QList<quint64> messageIds,					
+					quint64 sourceFolder,
+					quint64 targetFolder);
+    
+    bool saveMessage(const ::NmApiMessage &message);
+    
+    bool deleteMessages(const QList<quint64> messageIds);
+    
+    bool fetch(const NmApiMessage &message);
+    
+    bool send(const NmApiMessage &message);
+    
+    bool createAttachment(NmApiEmailMessage &message,const QVariant &attachmenSpec);
+
+    bool removeAttachment(NmApiEmailMessage &message,quint64 attachmentId);
+    
+signals:
+	void messagesCopied(int result);
+
+	void messagesCreated(int result);
+
+	void messagesMoved(int result);
+
+	void messagesDeleted(int result);
+
+private:
+	NmApiMessageManagerPrivate *d;
+};
+
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/nmail_settings_api/nmail_settings_api.pri	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+# 
+# Description:
+#
+#
+
+symbian*: { 
+    # Build.inf rules
+    BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+        "nmail_settings_api/nmapimailboxsettingsdata.h APP_LAYER_PLATFORM_EXPORT_PATH(nmapimailboxsettingsdata.h)" \
+	"nmail_settings_api/nmapimailboxsettings.h APP_LAYER_PLATFORM_EXPORT_PATH(nmapimailboxsettings.h)"
+    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/nmail_settings_api/nmapimailboxsettings.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#ifndef NMAPIMAILBOXSETTINGS_H_
+#define NMAPIMAILBOXSETTINGS_H_
+
+#include <QList>
+#include <QObject>
+
+#include <nmapidef.h>
+
+namespace EmailClientApi
+{
+
+class NmApiMailboxSettingsData;
+class NmApiMailboxSettingsPrivate;
+class NMAPI_EXPORT NmApiMailboxSettings : public QObject
+{
+    Q_OBJECT
+public:
+    NmApiMailboxSettings(QObject *parent = 0);
+    ~NmApiMailboxSettings();
+
+    bool listMailboxIds(QList<quint64> &idList);
+    bool loadSettings(quint64 mailboxId, NmApiMailboxSettingsData &data);
+    bool saveSettings(const NmApiMailboxSettingsData &data);
+    bool createMailbox(const QString &mailboxType, NmApiMailboxSettingsData &data);
+    bool deleteMailbox(quint64 mailboxId);
+    bool populateDefaultSettings(const QString &mailboxType, NmApiMailboxSettingsData &data);
+
+signals:
+    void mailboxDeleted(int result = 0);
+    
+protected:    
+    NmApiMailboxSettingsPrivate *d;
+ 
+};
+
+}
+
+#endif /* NMAPIMAILBOXSETTINGS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email_plat/nmail_settings_api/nmapimailboxsettingsdata.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#ifndef NMAPIMAILBOXSETTINGSDATA_H_
+#define NMAPIMAILBOXSETTINGSDATA_H_
+
+#include <QVariant>
+#include <nmapidef.h>
+
+namespace EmailClientApi
+{
+
+const QString NmApiMailboxTypeImap = "imap";
+const QString NmApiMailboxTypePop = "pop";
+
+const QString NmApiAuthNone = "none";
+const QString NmApiAuthSameAsIncoming = "SameAsIncoming";
+const QString NmApiAuthUserAuthentication = "UserAuthentication";
+
+const QString NmApiAutomatic = "automatic";
+const QString NmApiAlways = "always";
+const QString NmApiHomeOnly = "homeOnly";
+const QString NmApiOff = "off";
+
+const QString NmApiStartTls = "StartTls";
+const QString NmApiSSLTls = "SSLTls";
+const QString NmApiSecurityOff = NmApiOff;
+
+const QString NmApiKeepUpToDate = "Keep-Up-To-Date";
+const QString NmApiSaveEnergy = "Save-Energy";
+const QString NmApiFetchManually = "Manual-Fetch";
+const QString NmApiUserDefined = "User-Defined";
+
+enum NmApiWeekDays
+{
+    Mon = 0x01, Tue = 0x02, Wed = 0x04, Thu = 0x08, Fri = 0x10,
+    Sat = 0x20, Sun = 0x40
+};
+
+enum NmApiRefreshPeriods
+{
+    WhenMailboxOpens = 0, Every5minutes = 5, Every15minutes = 15,
+    EveryHour = 60, Every4Hours = 240
+};
+
+enum NmApiMailboxSettingKey
+{
+    IncomingLoginName = 0, // String
+    IncomingPassword, // String
+    MailboxName, // String
+    EmailAddress, // String
+    ReplyAddress, // String
+    EmailAlias, // String
+    MyName, // String    
+    DownloadPictures, // Integer: 0=Off, 1=On
+    MessageDivider, // Integer: 0=Off, 1=On
+    ReceptionActiveProfile, // String: Reception profile
+    ReceptionUserDefinedProfile, // Integer: 0=Disabled, 1=Enabled
+    ReceptionInboxSyncWindow, // Integer: 0=All messages
+    ReceptionGenericSyncWindowInMessages, // Integer: 0=All messages
+    ReceptionWeekDays, // Integer bitmask of weekdays
+    ReceptionDayStartTime, // Integer: 0-23
+    ReceptionDayEndTime, // Integer: 0-23
+    ReceptionRefreshPeriodDayTime, // Integer: 5,15,60,240,0="When open mailbox"
+    ReceptionRefreshPeriodOther, // Integer: 5,15,60,240,0="When open mailbox"
+    UserNameHidden, // Integer: 0=Off, 1=On
+    IncomingMailServer, // String
+    IncomingMailUsesAuthentication, // String    "none", "UserAuthentication"
+    IncomingMailSecurityType, // String  "StartTls", "SSLTls", "none"
+    OutgoingMailServer, // String
+    OutgoingMailUsesAuthentication, // String "none", "SameAsIncoming", "UserAuthentication"
+    OutgoingMailSecurityType, // String 	"StartTls", "SSLTls", "none"
+    IncomingPort, // Integer
+    OutgoingPort, // Integer
+    FolderPath, // String: Empty string means 'Default'
+    AlwaysOnlineState, // string "always", "homeOnly", "off"
+    EmailNotificationState, // string "automatic", "homeOnly", "off"
+    FirstEmnReceived, // Integer: 0=false,1=true
+    EmnReceivedNotSynced, // Integer: 0=false,1=true
+    AoLastSuccessfulUpdate, // QDateTime
+    AoLastUpdateFailed, // Integer: 0=false, 1=true
+    AoUpdateSuccessfulWithCurSettings, // Integer: 0=false, 1=true
+    IncomingSecureSockets, // Boolean
+    IncomingSSLWrapper, // Boolean
+    OutgoingLoginName, // String
+    OutgoingPassword, // String
+    UseOutgoingAuthentication, // Boolean
+    OutgoingSecureSockets, // Boolean
+    OutgoingSSLWrapper // Boolean
+};
+
+class NmApiMailboxSettingsDataPrivate;
+class NMAPI_EXPORT NmApiMailboxSettingsData
+{
+
+public:    
+    NmApiMailboxSettingsData();
+    ~NmApiMailboxSettingsData();
+
+    void setMailboxId(quint64 mailboxId);
+    quint64 mailboxId() const;
+    void setValue(int key, const QVariant &settingValue);
+    bool getValue(int key, QVariant &settingValue) const;
+    bool validateData() const;
+    void clearSettings();
+    QList<int> listSettings() const;
+
+protected:    
+    NmApiMailboxSettingsDataPrivate *d;
+
+};
+
+}//end namespace
+
+#endif /* NMAPIMAILBOXSETTINGSDATA_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/bwins/emailclientapiu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/data/emailclientapi.rss	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declares ECom registration information for email client api
+*     
+*
+*/
+
+#include <ecom/registryinfov2.rh>		//REGISTRY_INFO
+#include "emailclientapiimpl.hrh" 
+
+/** ECom version number to be used in Cmail related ECom registeration
+ *  resource files.
+ *  NOTE: Version number in ECom registeration resource file is saved as one
+ *  byte, so 255 is the maximum version number.
+ */
+#define KEmailEcomVersionNumber 7
+
+RESOURCE REGISTRY_INFO theInfo
+    {    
+    dll_uid = 0x20022D63;
+    resource_format_version = RESOURCE_FORMAT_VERSION_2;
+    interfaces =
+        {
+        INTERFACE_INFO
+            {
+            interface_uid = 0x20022D62;
+            implementations =
+                {
+                IMPLEMENTATION_INFO
+                    {
+                    implementation_uid = 0x20022D61;
+                    version_no = KEmailEcomVersionNumber;
+                    display_name = "email client api";
+                    default_data = "";
+    				opaque_data = "";
+    				rom_only=0;
+                    }
+                };
+            }
+        };
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/eabi/emailclientapiu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z24ImplementationGroupProxyRi @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/emailclientapi.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,107 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+
+TEMPLATE = lib
+TARGET = emailclientapi
+DEPENDPATH += . inc src
+INCLUDEPATH += . \
+			   ../../inc \
+			   ../emailframework/inc
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+HEADERS += inc/emailclientapiimpl.h \
+            inc/emailinterfacefactoryimpl.h \
+            inc/emailapiutils.h \
+            inc/emailmailbox.h \
+            inc/emailaddress.h \
+            inc/emailfolder.h \
+            inc/emailmessage.h \
+            inc/emailmailboxcache.h \
+            inc/messageiterator.h \
+            inc/emailcontent.h \
+            inc/emailmessagesearch.h \
+            inc/emailattachment.h \
+            inc/emailtextcontent.h \
+            inc/emailmultipart.h   
+
+SOURCES += src/emailclientapiimpl.cpp \
+            src/emailinterfacefactoryimpl.cpp \
+            src/implproxy.cpp \
+            src/emailapiutils.cpp \
+            src/emailmailbox.cpp \
+            src/emailaddress.cpp \
+            src/emailfolder.cpp \
+            src/emailmessage.cpp \
+            src/emailmailboxcache.cpp \
+            src/messageiterator.cpp \
+            src/emailcontent.cpp \
+            src/emailmessagesearch.cpp \
+            src/emailattachment.cpp \
+            src/emailtextcontent.cpp \
+            src/emailmultipart.cpp        
+        
+
+LIBS += -lbafl \
+        -lcone \
+        -leuser \
+        -lECom \
+        -lFSFWCommonLib \
+        -lFSMailFramework \
+        -lefsrv \
+        -lviewcli \
+        -lestor \
+        -lcentralrepository
+
+symbian*: {
+
+	INCLUDEPATH += /sf/mw/qtextensions/qthighway/inc
+	LIBS += -lxqservice 
+
+    TARGET.EPOCALLOWDLLDATA = 1
+    TARGET.CAPABILITY = CAP_ECOM_PLUGIN
+
+    TARGET.UID2 = 0x10009D8D
+    TARGET.UID3 = 0x20022D63
+
+    ecomPluginRegisterationFile = \
+    "SOURCEPATH data" \
+    "START RESOURCE emailclientapi.rss" \
+    "END" 
+
+    MMP_RULES += "SYSTEMINCLUDE /epoc32/include/ecom" 
+    MMP_RULES += ecomPluginRegisterationFile
+    MMP_RULES += "TARGETTYPE PLUGIN"
+
+    defBlock = \
+        "$${LITERAL_HASH}if defined(MARM)" \
+        "DEFFILE  eabi/emailclientapi.def" \
+        "$${LITERAL_HASH}else" \
+        "DEFFILE  bwins/emailclientapi.def" \
+        "$${LITERAL_HASH}endif"
+
+    MMP_RULES += defBlock
+    
+    BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+    "rom/emailclientapi.iby CORE_APP_LAYER_IBY_EXPORT_PATH(emailclientapi.iby)"    
+    
+    # Prevents C2874W warnings
+    QMAKE_CXXFLAGS.ARMCC += --diag_suppress 2874
+}
+
+win32 {
+	DESTDIR = ../../../../bin
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailaddress.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: mail address implementation definition
+*
+*/
+
+#ifndef EMAILADDRESS_H
+#define EMAILADDRESS_H
+
+#include <memailaddress.h>
+#include "emailapiutils.h"
+
+using namespace EmailInterface;
+
+NONSHARABLE_CLASS( CEmailAddress ) : public CBase, public MEmailAddress
+    {
+public:
+    static CEmailAddress* NewL( const TRole aRole, const TDataOwner aOwner );
+    static CEmailAddress* NewLC( const TRole aRole, const TDataOwner aOwner );
+    
+    ~CEmailAddress();
+
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+
+public: // from MEmailAddress
+    void SetAddressL( const TDesC& aAddress );
+    TPtrC Address() const;
+    
+    void SetDisplayNameL( const TDesC& aDisplayName );
+    TPtrC DisplayName() const;
+    
+    TRole Role() const;
+    void SetRole( const TRole aRole );
+            
+private:        
+        CEmailAddress( const TRole aRole, const TDataOwner aOwner );
+        
+private:
+        RBuf iAddress;
+        RBuf iDisplayName;
+        TRole iRole;
+        TDataOwner iOwner;
+    };
+
+#endif // EMAILADDRESS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailapiutils.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements utilities like CPluginData.
+*
+*/
+
+#ifndef EMAILAPIUTILS_H
+#define EMAILAPIUTILS_H
+
+#include <e32base.h>
+#include "cfsmailcommon.h"
+#include <emailapidefs.h>
+
+//using namespace EmailInterface;
+
+class CFSMailPlugin;
+
+enum TDataOwner
+    {
+    EClientOwns,
+    EAPIOwns
+    };
+
+
+/**
+* Helper container class for storing plugin pointer and implementation UID
+* @since S60 v5.2
+*/
+NONSHARABLE_CLASS( TPluginData )
+    {
+    public:
+    
+        inline TPluginData( TUid aUid ) : iPlugin( NULL ), iUid( TUid::Uid( aUid.iUid ) ) {}
+        
+        CFSMailPlugin* iPlugin;
+        
+        const TUid     iUid;
+    };
+    
+/**
+* Plugin data is a utility for protocol plugin creation and book 
+* keeping. Objects using the plugin should access it via this
+* class for optimised reference counting.
+*/
+NONSHARABLE_CLASS( CPluginData ) : public CBase
+{
+public:    
+    /**
+    * returns plugin instance or null if failed to instantiate.
+    * LoadResult() will return error code in instantiation
+    */
+    CFSMailPlugin* ClaimInstance();
+    
+    /**
+    * returns plugin instance or leaves if failed to instantiate.
+    */
+    CFSMailPlugin* ClaimInstanceL();
+
+    /**
+    *  Decreases access count of the plugin and deletes if reaches zero.
+    * Note! this should be called only aftre succesful ClaimInstance or 
+    * ClaimInstanceL.
+    */
+    void ReleaseInstance();
+    
+    /**
+    * Adds cleanup operation calling ReleaseInstance to cleanup stack
+    */                                                 
+    void ReleasePushL();
+    /**
+    * Cleanup operation for CleanupReleasePluginPushL
+    */
+    static void CleanupOperation( TAny* aAny );
+    
+    TUid Uid() const;
+    
+    TInt LoadResult() const;
+
+private: 
+    /* only CEmailClientApi owns instances of this, it should make sure that
+     * no duplicates exist, otherwise reference counting of plugins fail
+     * (this is not singleton class)
+     */
+    friend class CEmailClientApi;
+    friend class CEmailMailboxCache;
+    
+    CPluginData( TUid aUid );
+    ~CPluginData();
+
+private:    
+    // plugin pointer and uid
+    TPluginData iData;
+    
+    TInt iPluginLoadError;
+        
+    // >0 when iPlugin is instantiated
+    TUint          iRefCount;
+    
+    // EFalse if shared from Email Framework (CFSMailClient). If true,
+    // ReleaseInstance() doesn't delete plugin
+    TBool          iOwned;
+};
+
+/**
+* Constructs internal message id type from plugin data and mailbox/folder/message id 
+*/
+TFSMailMsgId FsMsgId( const CPluginData& aPluginData, const EmailInterface::TBaseId& aId );
+
+/**
+* Cleanup support for pointer arrays
+*/
+template<class T>
+class CleanupResetAndDestroy
+{
+public:
+    inline static void PushL( T& aItem );
+
+private:
+    inline static void ResetAndDestroy( TAny *aPtr );
+} ;
+
+template <class T>
+inline void CleanupResetAndDestroyPushL( T& aRef )
+    {
+    CleanupResetAndDestroy<T>::PushL( aRef );
+    }
+
+/**
+* Cleanup support for email interface objects.
+*/
+class CleanupReleasePush
+{
+public:
+    static void PushL( EmailInterface::MEmailInterface& aItem );
+
+private:
+    static void Release( TAny *aPtr );
+} ;
+
+
+#include "emailapiutils.inl"
+
+
+#endif // EMAILAPIUTILS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailapiutils.inl	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailMailbox.
+*
+*/
+
+template<class T>
+inline void CleanupResetAndDestroy<T>::PushL( T& aItem ) 
+    { 
+    TCleanupItem item( &CleanupResetAndDestroy::ResetAndDestroy, &aItem );
+    CleanupStack::PushL( item );
+    }
+
+template<class T>
+inline void CleanupResetAndDestroy<T>::ResetAndDestroy( TAny *aPtr )
+    {
+    reinterpret_cast<T*>( aPtr )->ResetAndDestroy();
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailattachment.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,162 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of Email attachment.
+*
+*/
+
+
+#ifndef EMAILATTACHMENT_H
+#define EMAILATTACHMENT_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+#include "cfsmailclient.h"
+#include <memailcontent.h>
+#include "emailapiutils.h"
+
+using namespace EmailInterface;
+
+class CEmailMessageContent;
+// CLASS DECLARATION
+
+/**
+ *  CEmailAttachment
+ * 
+ */
+
+NONSHARABLE_CLASS(CEmailAttachment) : public CBase, public MEmailAttachment
+    {
+public:
+    // Constructors and destructor
+
+    /**
+     * Destructor.
+     */
+    ~CEmailAttachment();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CEmailAttachment* NewL(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart *aAtt,
+        const TDataOwner aOwner );    
+
+    /**
+     * Two-phased constructor.
+     */
+    static CEmailAttachment* NewLC(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,    
+        CFSMailMessagePart *aAtt,
+        const TDataOwner aOwner );    
+
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+
+public: // from MEmailAttachment
+    /**
+    * Returns file handle of this attachment. If the attachment is
+    * not associated with a file, null file handle is returned.
+    */
+    RFile FileL() const;
+
+    /**
+    * Sets file name field
+    */
+    void SetFileNameL( const TDesC& aFileName );
+
+    /**
+    * Returns file name or null pointer descriptor if attachment
+    * is not associated with any file
+    */
+    TPtrC FileNameL() const;
+    
+    
+public: // from MEmailMessageContent
+    
+    TMessageContentId Id() const;
+
+    TPtrC ContentType() const;
+
+    void SetContentType( const TDesC& aContentType );
+
+    TPtrC ContentId() const;
+
+    void SetContentId( const TDesC& aContentId );
+
+    TPtrC ContentDescription() const;
+
+    void SetContentDescription( const TDesC& aContentDescription );
+
+    TPtrC ContentDisposition() const;
+
+    void SetContentDisposition( const TDesC& aContentDisposition );
+
+    TPtrC ContentClass() const;
+
+    void SetContentClass( const TDesC& aContentClass );
+
+    TInt AvailableSize() const;
+
+    TInt TotalSize() const;
+
+    TPtrC ContentL() const;
+
+    void SetContentL( const TDesC& aContent );
+
+    void FetchL( MEmailFetchObserver& aObserver );
+
+    void CancelFetch();
+
+    void SaveToFileL( const TDesC& aPath );
+
+    MEmailMultipart* AsMultipartOrNull() const;
+    
+    MEmailTextContent* AsTextContentOrNull() const;
+
+    MEmailAttachment* AsAttachmentOrNull() const;
+    
+private:
+
+    /**
+     * Constructor for performing 1st stage construction
+     */
+    CEmailAttachment( const TDataOwner aOwner );
+
+    /**
+     * EPOC default constructor for performing 2nd stage construction
+     */
+    void ConstructL(
+            CPluginData& aPluginData,
+            const TMessageContentId& aMsgContentId );    
+
+    void ConstructL(
+            CPluginData& aPluginData,
+            const TMessageContentId& aMsgContentId,
+            CFSMailMessagePart *aPart);    
+    
+private:        
+    CEmailMessageContent*   iEmailMsgContent;
+    TDataOwner iOwner;
+    };
+
+#endif // EMAILATTACHMENT_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailclientapiimpl.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,232 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of Email API main interface.
+*
+*/
+
+#ifndef EMAILCLIENTAPIIMPL_H
+#define EMAILCLIENTAPIIMPL_H
+
+
+#include <implementationinformation.h> 
+#include "emailapiutils.h"
+#include "cfsmailcommon.h"
+#include "mfsmaileventobserver.h"    
+#include <memailclientapi.h>
+#include "emailclientpluginmanager.h"
+
+
+using namespace EmailInterface;
+
+class CFSMailBox;
+class MEmailEventObserver;
+class CVwsSessionWrapper;
+class CFSMailPlugin;
+class TFSMailMsgId;
+class CEmailMailboxCache;
+class CFSMailClient;
+
+/**
+*  "Framework" class including plugin management
+* @since S60 v5.2
+*/
+NONSHARABLE_CLASS( CEmailClientApi ) : public CBase, public MEmailClientApi
+{
+public:
+    /**
+    * Constructor
+    * @return
+    */
+    static CEmailClientApi* NewL();
+    
+    /**
+     *
+     */
+     CEmailClientApi();       
+
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+    
+public: // from MEmailClientApi
+
+    /** @see MEmailClientApi */   
+    MEmailMailbox* MailboxL( const TMailboxId& aId );
+   
+    /** @see MEmailClientApi */   
+    MEmailMailbox* MailboxL( const TPtrC& aAddress );
+           
+    /**
+    * Gets all mailboxes in pointer array. It is recommended to free other
+    * mailboxes besides needed one to optimise memory usage.
+    */    
+    TInt GetMailboxesL( RMailboxPtrArray& aMailboxes );
+    
+    /**
+    */
+    void LaunchEmailL( const TLaunchPolicy aPolicy );
+
+public: // new methods
+
+    /**
+     * Gets array of mailbox ids
+     * @param aMailboxes mailbox ids from all plugins
+     * @return number of mailboxes returned in aMailboxes
+     */
+    TInt GetMailboxIdsL( REmailMailboxIdArray& aMailboxes );
+        
+private:
+
+    /**
+     * Constructor
+     */
+    void ConstructL();
+    
+     /**
+     * Destructor
+     */
+    ~CEmailClientApi();
+
+    /**
+     * Push ECom implementation info to cleanup operation to cleanup stack
+     */
+    void CleanupImplInfoPushL( RPointerArray<CImplementationInformation>& aArray );
+    
+    /**
+     * Cleanup operation for ECom implementation info
+     */
+    static void CleanupImplInfo( TAny* aAny );
+   
+
+    // Group of methods for book keeping of loaded protocol plugins by this object.
+    // In certain situations it is preferable to have a plugin in memory
+    // instead of loading/unloading frequently.
+    
+    /** Increases plugin reference count if CEmailClientApi already doesn't
+     *  have active instance. When plugin is needed internally, this method
+     * should be accessor to a plugin. Counterpart is ReleasePlugin() when
+     * CEmailClientApi doesn't itself need plugin any more.
+     */
+    CFSMailPlugin* UsePlugin( CPluginData& aPluginData );
+    
+    /**
+    * For finding plugin data
+    */
+    TInt IndexOfLoadedPluginData( const TPluginData& aPluginData ) const;
+    
+    /**
+    * Used in comparing plugin data in array (part of find algorithm)
+    */    
+    static TBool PluginDataEquals( const TPluginData& a1, const TPluginData& a2 );
+    
+    /**
+    * This object doesn't need related protocol plugin
+    */
+    void ReleasePlugin( CPluginData& aPluginData );
+    
+    /**
+    * This object doesn't need any protocol plugin
+    */
+    void ReleaseAllPlugins();
+    
+    /**
+    * Return mailbox cache, creates it when called first time
+    */
+    CEmailMailboxCache& MailboxInfoCacheL();
+    
+    /**
+    * Caches mailbox ids and their mapping to related plugin data for quick
+    * lookup. When a mailbox with specific id is next time asked, related
+    * protocol plugin is already known.
+    */
+    void UpdateMailboxInfoCacheL();
+
+    /**
+    * Internal, used from UpdateMailboxInfoCacheL
+    */    
+    TBool CachePluginMailboxesL( 
+        CPluginData& aPluginData, 
+        CFSMailPlugin& aPlugin );
+    
+private:    
+    typedef RPointerArray<CPluginData> RPluginDataArray;
+    
+    /**
+    * Iterator for CPluginData elements in an array
+    */
+    class TPluginIterator
+    {
+    public:
+        // constructor
+        inline TPluginIterator( RPluginDataArray& aArray ) : 
+            iArray( aArray ), iIndex( 0 ) {}
+        
+        /**
+        * return next element
+        */
+        CPluginData* Next();
+    private:
+        // iterator array
+        RPluginDataArray& iArray;
+        // current iterator index
+        TInt iIndex;
+    };
+    
+private:
+    // plugin data array for all protocol plugins
+    RPluginDataArray    iPluginDataArray;
+
+    // singleton instance counter    
+    TInt iInstanceCounter;
+    
+    // book keeping of loaded plugins
+    RArray<TPluginData> iLoadedPluginsArray;
+       
+    // Mailbox ids are cached when first time listed. Related plugin uid
+    // is include in the cache.
+    CEmailMailboxCache* iMailboxCache;
+
+    CFSMailClient* iMailClient;
+    
+};
+
+/**
+* Email application launcher. 
+*/
+NONSHARABLE_CLASS( CEmailLauncher ) : public CBase
+{
+public:
+    static CEmailLauncher* NewL();
+    
+    ~CEmailLauncher();
+                                    
+    /**
+    *
+    */
+     void LaunchL( const TMailboxId& aMailboxId );
+private:
+    
+    CEmailLauncher();
+    
+    void ConstructL();
+    
+    // Owned window server session.
+    CVwsSessionWrapper* iViewSrvSession;
+};
+
+
+#endif // EMAILCLIENTAPIIMPL_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailclientapiimpl.hrh	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: email client api internal definitions
+*
+*/
+#ifndef _EMAILCLIENTAPIIMPL_HRH
+#define _EMAILCLIENTAPIIMPL_HRH
+
+#define KEmailClientApiDllUid       0x20022D63
+#define KEmailClientApiImplUid      0x20022D61
+
+#endif // _EMAILCLIENTAPIIMPL_HRH
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailclientapiimpldefs.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: .
+*
+*/
+
+#ifndef _EMAILCLIENTAPIIMPLDEFS_H
+#define _EMAILCLIENTAPIIMPLDEFS_H
+
+enum TEmailImplPanic {
+    EMailPanicPluginNotReleased,
+    EMailPanicSortMapIndexOutOfBounds
+};
+
+void Panic( TEmailImplPanic aPanic );
+
+#endif // _EMAILCLIENTAPIIMPLDEFS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailclientpluginmanager.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors: Definition for plugin manager interface
+*
+* Description: 
+*
+*/
+
+#ifndef MEMAILPLUGINMANAGER_H_
+#define MEMAILPLUGINMANAGER_H_
+
+#include "cfsmailcommon.h"
+
+class MEmailClientPluginManager
+    {
+public:
+    virtual CFSMailPlugin* GetPluginByUid(TUid aUid) = 0; 
+    };
+
+#endif // MEMAILPLUGINMANAGER_H_
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailcontent.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: mail content implementation definition
+*
+*/
+
+#ifndef EMAILCONTENT_H
+#define EMAILCONTENT_H
+
+#include <memailcontent.h>
+
+#include "cfsmailclient.h"
+#include "emailapiutils.h"
+
+using namespace EmailInterface;
+
+class CFSMailPlugin;
+class CFSMailRequestObserver;
+
+NONSHARABLE_CLASS( CEmailMessageContent ) : public CBase, 
+                                            public MEmailMessageContent
+{
+public:
+    static CEmailMessageContent* NewL( 
+            CPluginData& aPluginData,
+            const TMessageContentId& aMsgContentId,
+            CFSMailMessagePart* aPart);
+        
+    ~CEmailMessageContent();
+    
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+
+public: // from MEmailMessageContent
+    TMessageContentId Id() const;
+
+    TPtrC ContentType() const;
+
+    void SetContentType( const TDesC& aContentType );
+
+    TPtrC ContentId() const;
+
+    void SetContentId( const TDesC& aContentId );
+
+    TPtrC ContentDescription() const;
+
+    void SetContentDescription( const TDesC& aContentDescription );
+
+    TPtrC ContentDisposition() const;
+
+    void SetContentDisposition( const TDesC& aContentDisposition );
+
+    TPtrC ContentClass() const;
+
+    void SetContentClass( const TDesC& aContentClass );
+
+    TInt AvailableSize() const;
+
+    TInt TotalSize() const;
+
+    TPtrC ContentL() const;
+
+    void SetContentL( const TDesC& aContent );
+
+    void FetchL( MEmailFetchObserver& aObserver );
+
+    void CancelFetch();
+
+    void SaveToFileL( const TDesC& aPath );
+
+    MEmailMultipart* AsMultipartOrNull() const;
+    
+    MEmailTextContent* AsTextContentOrNull() const;
+
+    MEmailAttachment* AsAttachmentOrNull() const;
+    
+public:     
+    CFSMailMessagePart& Part();
+    void SetPart( CFSMailMessagePart *aPart );
+    
+    CPluginData& PluginData();
+        
+protected:
+    CEmailMessageContent( CPluginData& aPluginData, const TMessageContentId& aMsgContentId, CFSMailMessagePart* aPart );
+    
+private:
+    class CContentRequestObserver: public CBase, 
+                                   public MFSMailRequestObserver
+        {
+    public:
+        CContentRequestObserver( CEmailMessageContent &aParent);
+        
+        virtual void RequestResponseL( TFSProgress aEvent, TInt aRequestId );
+        void SetObserverL( MEmailFetchObserver* aObserver );
+    private:
+        MEmailFetchObserver* iObserver;
+        CEmailMessageContent& iParent;
+        };
+
+private:
+    void ConstructL();
+
+private:
+    CPluginData&            iPluginData;
+    CFSMailPlugin*          iPlugin;
+    CFSMailMessagePart*     iPart;
+    TMessageContentId       iMsgContentId;
+    mutable HBufC*          iBuf;
+    mutable TUint           iUsed;
+    CContentRequestObserver *iFetchObserver;
+    TInt                    iRequestId;
+};
+
+#endif // EMAILCONTENT_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailfolder.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: CEmailMailbox.
+*
+*/
+
+#ifndef CEMAILFOLDER_H
+#define CEMAILFOLDER_H
+
+#include <emailapidefs.h>
+#include "cfsmailcommon.h"
+#include <memailfolder.h>
+#include "mfsmaileventobserver.h"
+
+using namespace EmailInterface;
+
+class CFSMailPlugin;
+class CPluginData;
+class CFSMailFolder;
+class EmailInterface::MMessageIterator;
+
+NONSHARABLE_CLASS( CEmailFolder ) : 
+    public CBase, 
+    public MEmailFolder
+{
+public:
+    
+    static CEmailFolder* NewLC( 
+        CPluginData& aPluginData,
+        const TFolderId& aFolderId,
+        CFSMailFolder *aFolder );
+    
+    static CEmailFolder* NewL( 
+        CPluginData& aPluginData,
+        const TFolderId& aFolderId,
+        CFSMailFolder *aFolder );
+
+    ~CEmailFolder();           
+
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+    
+public:    // from MEmailFolder
+    TFolderId FolderId() const;
+    
+    TFolderId ParentFolderId() const;
+    
+    TFolderType FolderType() const;    
+
+    TPtrC Name() const;
+
+    /**
+    * Returns direct childs of this folder, i.e. this is not recursive.
+    * @return number of subfolders or an error code
+    */    
+    TInt GetSubfoldersL( 
+        RFolderArray& aSubfolders ) const;
+
+    EmailInterface::MMessageIterator* MessagesL( 
+        const RSortCriteriaArray& aCriteria );
+    
+    void DeleteMessagesL( const REmailMessageIdArray& aMessageIds );
+    
+private: // constructors
+    CEmailFolder( CPluginData& aPluginData, const TFolderId& aFolderId, CFSMailFolder *aFolder );
+    
+    void ConstructL();
+
+private: // Internal methods
+    static void ToFsSortCriteriaL( 
+        const RSortCriteriaArray& aSortCriteria, 
+        RArray<TFSMailSortCriteria>& aFsCriteria );
+
+private:
+    CPluginData&    iPluginData;
+    
+    CFSMailPlugin*  iPlugin;
+
+    TFolderType     iFolderType;
+       
+    TFolderId       iFolderId;
+    
+    TFolderId       iParentId;
+    
+    CFSMailFolder   *iFolder;
+};
+    
+#endif // CEMAILFOLDER_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailinterfacefactoryimpl.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Interface factory implementation class definition
+*
+*/
+
+#ifndef EMAILINTERFACEFACTORY_H
+#define EMAILINTERFACEFACTORY_H
+
+#include <emailinterfacefactory.h>
+
+using namespace EmailInterface;
+
+/**
+* Implements CEmailInterfaceFactory ECom interface
+*
+*/
+NONSHARABLE_CLASS( CEmailInterfaceFactoryImpl ) : public CEmailInterfaceFactory
+{
+public: 
+
+    /**
+    * Creates interface factory
+    * @return interface factory
+    */
+    static CEmailInterfaceFactoryImpl* NewL();
+    
+    // destructor
+    ~CEmailInterfaceFactoryImpl();
+    
+    /** @see CEmailInterfaceFactory::InterfaceL */
+    MEmailInterface* InterfaceL( const TInt aInterfaceId );
+    
+private:
+    enum TEmailUidAppendRemoveMode
+        {
+        EEmailUidModeAppend,
+        EEmailUidModeRemove,
+        };
+    
+    /**
+    * Registers/removes application UID to/from P&S so that the application
+    * can be shutdown during Email IAD update. Update may fail if any
+    * application is using some Email services during the update.
+    * Application UID is removed from the list in destructor.
+    * @param aMode Is the current process UID added or removed from the list
+    */
+    void AppendOrRemoveUidL( const TEmailUidAppendRemoveMode aMode );
+
+private:    
+    // c++ constructor and 2nd phase constructor
+    CEmailInterfaceFactoryImpl();
+    void ConstructL();
+};
+
+#endif // EMAILINTERFACEFACTORY_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailmailbox.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailMailbox.
+*
+*/
+
+#ifndef EMAILMAILBOX_H
+#define EMAILMAILBOX_H
+
+#include "cfsmailcommon.h"
+#include <memailmailbox.h>
+#include "mfsmaileventobserver.h"
+#include "mfsmailrequestobserver.h"
+#include "mmailboxcontentobserver.h"
+
+using namespace EmailInterface;
+
+class CFSMailBox;
+class CFSMailAddress;
+class CFSMailPlugin;
+class CPluginData;
+class CEmailAddress;
+
+NONSHARABLE_CLASS( CEmailMailbox ) : 
+    public CBase, 
+    public MEmailMailbox
+{
+public:
+    
+    static CEmailMailbox* NewL( 
+        CPluginData& aPluginData,
+        const TMailboxId& aMailboxId );
+    
+    ~CEmailMailbox();           
+
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+    
+public:    // from MEmailMailbox
+    /**@see MEmailMailbox */
+    TMailboxId MailboxId() const;
+    
+    /**@see MEmailMailbox */
+    MEmailAddress* AddressL() const;
+    
+    /**@see MEmailMailbox */
+    TPtrC MailboxName() const;
+    
+    /**@see MEmailMailbox */
+    TInt GetFoldersL( RFolderArray& aFolders ) const;
+
+    /**@see MEmailMailbox */
+    MEmailFolder* FolderL( const TFolderId& aFolderId ) const;
+    
+    /**@see MEmailMailbox */
+    MEmailFolder* FolderByTypeL( 
+        const TFolderType aFolderType ) const;
+        
+    /**@see MEmailMailbox */
+    MEmailMessage* MessageL( const TMessageId& aMessageId );
+    
+    /**@see MEmailMailbox */
+    MEmailMessage* CreateDraftMessageL() const;
+    
+    /**@see MEmailMailbox */
+    MEmailMessage* CreateReplyMessageL( const TMessageId& aMessageId, const TBool aReplyToAll = ETrue ) const;
+    
+    /**@see MEmailMailbox */
+    MEmailMessage* CreateForwardMessageL( const TMessageId& aMessageId ) const;
+    
+    /**@see MEmailMailbox */
+    void SynchroniseL( MMailboxSyncObserver& aObserver );
+        
+    /**@see MEmailMailbox */
+    void CancelSynchronise();
+    
+    /**@see MEmailMailbox */
+    void RegisterObserverL( MMailboxContentObserver& aObserver );
+        
+    /**@see MEmailMailbox */
+    void UnregisterObserver( MMailboxContentObserver& aObserver );
+    
+    /**@see MEmailMailbox */
+    MEmailMessageSearchAsync* MessageSearchL();
+
+    /**@see MEmailMailbox */
+    void ShowInboxL();
+
+    /**@see MEmailMailbox */
+    void EditNewMessageL();
+    
+
+public: // new methods
+
+private:       
+    TFSMailMsgId FsMailboxId() const;
+    
+private: // constructors
+    CEmailMailbox( CPluginData& aPluginData, const TMailboxId& aPlugin );
+    
+    void ConstructL();
+
+private: // inner class for mailbox event handling
+    class TObserverEventMapper : public MFSMailEventObserver
+    {
+    public:
+        TObserverEventMapper( CFSMailPlugin* aPlugin, TUid aPluginUid, const TMailboxId& aMailboxId );
+        ~TObserverEventMapper();
+        void AddObserverL( MMailboxContentObserver& aObserver );
+        void RemoveObserver( MMailboxContentObserver& aObserver );
+    public: // from MFSMailEventObserver
+        virtual void EventL( TFSMailEvent aEvent, TFSMailMsgId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        typedef void ( CEmailMailbox::TObserverEventMapper::*TEventMapFunc)( TMailboxId, TAny*, TAny*, TAny* );
+    private: // mappers, so say we all!
+        void ConvertParamsL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, REmailMessageIdArray& aMessageIds, TFolderId& aFolderId );
+        void IgnoreEventL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void NewMessageL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void MessageChangedL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void MessageDeletedL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void MessageMoved( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void MessageCopiedL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void NewFolderL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void FolderChangeL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void FoldersDeletedL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void FoldersMovedL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+        void ExceptionL( TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+    
+    private:                                                                                                                         
+        static TBool Equals( const MMailboxContentObserver& a1, const MMailboxContentObserver& a2 );
+    private:
+        CFSMailPlugin*  iPlugin;
+        TFSMailMsgId    iFsMailboxId;
+        RPointerArray<MMailboxContentObserver> iClientObservers;
+    };
+    class CEmailRequestObserver: public CBase,
+                                 public MFSMailRequestObserver                                 
+        {
+    public:
+        CEmailRequestObserver();
+        
+        void RequestResponseL( TFSProgress aEvent, TInt aRequestId );
+        void SetObserverL( MMailboxSyncObserver* aObserver );
+    private:
+        MMailboxSyncObserver* iObserver;
+        };
+        
+private:        
+
+    CPluginData&    iPluginData;
+    
+    CFSMailPlugin*  iPlugin;
+
+    TMailboxId      iMailboxId;
+    
+    TObserverEventMapper* iEventMapper;
+
+    mutable CEmailAddress* iAddress;
+
+    CFSMailBox*     iFsMailbox;
+    
+    CEmailRequestObserver* iSyncObserver;    
+    
+    TInt iRequestId;
+};
+    
+#endif // EMAILMAILBOX_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailmailboxcache.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition for mailbox cache
+*
+*/
+
+#ifndef EMAILMAILBOXCACHE_H
+#define EMAILMAILBOXCACHE_H
+
+#include <e32base.h> 
+#include <emailapidefs.h>
+
+using namespace EmailInterface;
+
+class CPluginData;
+
+
+/**
+* Cache associating mailbox with a protocol plugin. Improves performance by
+* removing need to load protocol plugins every time a mailbox needs to be
+* accessed (and keeping plugin loaded when it is not needed)
+* @since s60 v5.2
+*/
+NONSHARABLE_CLASS( CEmailMailboxCache ) : public CBase
+{
+public:
+    /**
+    * Cache entry to access plugin by mailbox id
+    */
+    class TCacheEntry
+    {
+    public:
+        inline TCacheEntry( 
+            CPluginData* aPluginData, 
+            TMailboxId aId ) : 
+            iPluginData( aPluginData ), 
+            iMailboxId( aId ) {}
+        CPluginData* iPluginData;
+        TMailboxId iMailboxId;
+    };
+    
+    /**
+    * Constructor
+    */
+    static CEmailMailboxCache* NewL();
+    
+    /** destructor */
+    ~CEmailMailboxCache();
+    
+    /**
+    * Clears cache and indicates that one or more AddMailboxL calls will 
+    * follow.
+    * Cleanup support invalidates cache if leave occurs before EndCachingPop()
+    * is called
+    */
+    void StartCachingPushL();
+    
+    /**
+    * Marks caching fully complete for all mailboxes (call when no more
+    * AddMailboxL will follow) and pops cleanup item.
+    */
+    void EndCachingPop();      
+    
+    /**
+    * Returns if mailboxes are cached
+    */
+    TBool IsCached() const;
+
+    /**
+    * Adds mailbox to cache.
+    * @param aPluginData mailbox associated with plugin(data)
+    * @param aMailboxId mailbox id
+    * @precondition: StartCaching must have been called. 
+    */
+    void AddMailboxL( CPluginData& aPluginData, const TMailboxId& aMailboxId );
+    
+    /**
+    * Returns plugin data by mailbox id
+    * @param aMailboxId 
+    * @return plugin data associated with specified mailbox
+    */
+    CPluginData* PluginDataL( const TMailboxId& aMailboxId ) const;
+
+    /**
+    * Returns plugin data by plugin id
+    * @param aPluginId 
+    * @return plugin data associated with specified plugin
+    */
+    CPluginData* PluginDataL( const TUid& aPluginId ) const;
+    
+    /**
+    * Gets all mailbox ids in all protocol plugins
+    */
+    void GetIdsL( REmailMailboxIdArray& aIdArray ) const;
+    
+private:    
+
+    TInt FindById( const TMailboxId& aMailboxId ) const;
+    TInt FindByPluginIdL( const TUid& aPluginId ) const;    
+    static TBool Equals( const TCacheEntry& a1, const  TCacheEntry& a2 );
+    static TBool PluginEquals( const TCacheEntry& a1, const  TCacheEntry& a2 );
+    
+    static void CleanupOp( TAny* aAny );
+    
+private:
+    
+    CEmailMailboxCache();
+    
+    void ConstructL();
+
+    enum TCacheState {
+        EEmpty,
+        ECaching,
+        EComplete
+    };
+private:
+    // empty, caching or caching complete
+    TCacheState iState;
+
+    // cached mailbox id with associated plugin data
+    RArray<TCacheEntry> iEntries;
+};
+
+
+#endif // EMAILMAILBOXCACHE_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailmessage.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,200 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: mail message implementation definition
+*
+*/
+
+#ifndef EMAILMESSAGE_H
+#define EMAILMESSAGE_H
+
+#include <memailmessage.h>
+#include "cfsmailcommon.h"
+#include "emailapiutils.h"
+#include "MFSMailRequestObserver.h"
+#include <QEventLoop>
+
+using namespace EmailInterface;
+
+class CFSMailMessagePart;
+class CFSMailMessage;
+class CFSMailAddress;
+class CFSMailPlugin;
+class CPluginData;
+class CEmailAddress;
+class CEmailAttachment;
+class CEmailTextContent;
+class CEmailMultipart;
+
+NONSHARABLE_CLASS( CEmailMessage ) : public CBase, public MEmailMessage, public MFSMailRequestObserver
+    {
+public:
+    /**
+    * Creates email message from plugin message
+    */
+    static CEmailMessage* NewL( CPluginData& aPluginData,
+                                CFSMailMessage* aFsMessage,
+                                const TDataOwner aOwner );
+
+    ~CEmailMessage();
+
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+    
+public: // from MEmailMessage
+    /**@see MEmailMessage */
+    const TMessageId& MessageId() const;
+    
+    /**@see MEmailMessage */
+    MEmailAddress* SenderAddressL() const;
+    
+    /**@see MEmailMessage */
+    MEmailAddress* ReplyToAddressL() const;
+    
+    /**@see MEmailMessage */
+    void SetReplyToAddressL( const MEmailAddress& aSender );
+    
+    /**@see MEmailMessage */
+    TInt GetRecipientsL( const MEmailAddress::TRole aRole,
+        REmailAddressArray& aRecipients ) const;            
+    
+    /**@see MEmailMessage */
+    void SetRecipientsL( const MEmailAddress::TRole aRole, REmailAddressArray& aRecipients );
+    
+    /**@see MEmailMessage */
+    void RemoveRecipientL( const MEmailAddress& aRecipient );
+    
+    /**@see MEmailMessage */
+    TPtrC Subject() const;
+
+    /**@see MEmailMessage */
+    void  SetSubjectL( const TPtrC& aSubject );    
+    
+    /**@see MEmailMessage */
+    TTime Date() const;
+
+    /**@see MEmailMessage */
+    TInt Flags() const;
+    
+    /**@see MEmailMessage */
+    void SetFlag( const TUint aFlag );
+    
+    /**@see MEmailMessage */
+    void ResetFlag( const TUint aFlag );
+
+    /**@see MEmailMessage */
+    MEmailMessageContent* ContentL() const;
+
+    /**@see MEmailMessage */
+    void SetContentL( const MEmailMessageContent* aContent );
+    
+    /**@see MEmailMessage */
+    void SetPlainTextBodyL( const TDesC& aPlainText );
+
+    /**@see MEmailMessage */
+    MEmailAttachment* AddAttachmentL( const TDesC& aFullPath );
+    
+    /**@see MEmailMessage */
+    MEmailAttachment* AddAttachmentL( RFile& aFile );
+    
+    /**@see MEmailMessage */
+    TInt GetAttachmentsL( REmailAttachmentArray& aAttachments );
+    
+    /**@see MEmailMessage */
+    void RemoveAttachmentL( const MEmailAttachment& aAttachment );
+
+    /**@see MEmailMessage */
+    const TFolderId& ParentFolderId() const;
+
+    /**@see MEmailMessage */
+    void SaveChangesL();
+
+    /**@see MEmailMessage */
+    void SendL();
+
+    /**@see MEmailMessage */
+    void ShowMessageViewerL();
+    
+    /**@see MEmailMessage */
+    void ReplyToMessageL( const TBool aReplyToAll = ETrue );
+    
+    /**@see MEmailMessage */
+    void ForwardMessageL();
+    
+protected: // From MFSMailRequestObserver
+    void RequestResponseL( TFSProgress aEvent, TInt aRequestId );
+
+private:        
+
+    // Copies/moves flag values from iPluginMessage's flags to local flag member variable
+    void InitializeFlagValues();
+    
+    CEmailMessage( CPluginData& aPluginData, CFSMailMessage* aMessage, const TDataOwner aOwner );
+    
+    void ConstructL();
+							       
+    void ConvertAddressArrayL( const MEmailAddress::TRole aRole, 
+                               const RPointerArray<CFSMailAddress>& aSrc, 
+                               REmailAddressArray& aDst ) const; 
+    CEmailAddress* CreateAddressLC( const MEmailAddress::TRole aRole, CFSMailAddress& aFsAddress ) const;
+    TUint MapFlags( const TUint& aFlag );
+    
+    TMessageContentId MessageContentId( TEntryId aContentId ) const;
+        
+private:
+    CPluginData&    iPluginData;
+    
+    CFSMailPlugin*  iPlugin;
+
+    TMessageId      iMessageId;
+    
+    TMessageContentId   iMsgContentId;
+                                                                                  
+    mutable CEmailAddress*  iSender;
+    
+    mutable CEmailAddress*  iReplyTo;
+    
+    REmailAddressArray iRecipients;
+    
+    CFSMailMessage* iPluginMessage;
+    
+    TUint        iFlags;
+    
+    mutable CEmailTextContent *iTextContent;
+    mutable CEmailMultipart* iContent;
+    RPointerArray<CEmailAttachment> iAttachments;
+    TDataOwner iOwner;
+    QEventLoop iEventLoop;
+    TInt iError;
+
+    };
+//Class for compare email content type 
+class TContentType
+{
+public:
+    TContentType( const TDesC& aContentType );
+    // Returns ETrue iff the content type represented by this object 
+    // (after parameters have been removed) is equal to the given content type.
+    TBool Equals( const TDesC& aContentType );
+
+private:
+    // Content type (without parameters)
+    TPtrC iContentType;
+};
+
+
+#endif // EMAILMESSAGE_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailmessagesearch.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of Email message search API.
+*
+*/
+
+#ifndef EMAILMESSAGESEARCHASYNCIMPL_H_
+#define EMAILMESSAGESEARCHASYNCIMPL_H_
+
+#include <memailmessage.h>
+#include <memailmessagesearch.h>
+#include <emailsorting.h>
+
+#include "cfsmailclient.h"
+#include "mfsmailboxsearchobserver.h"
+#include "emailapiutils.h"
+
+using namespace EmailInterface;
+
+
+NONSHARABLE_CLASS( CEmailMessageSearchAsync) : 
+    public CBase, 
+    public MEmailMessageSearchAsync, 
+    public MFSMailBoxSearchObserver
+
+{
+public:
+    /**
+    * Constructor
+    * @return
+    */
+    static CEmailMessageSearchAsync* NewL(
+        CPluginData& aPluginData,
+        const TMailboxId& aMailboxId );
+    
+    /**
+     * Destructor
+     */
+    ~CEmailMessageSearchAsync();
+    
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+    
+
+public: // from MEmailMessageSearchAsync
+    /**
+    * Sets sort order for search results.
+    * Leaves KErrNotReady if search is ongoing.
+    */
+    void SetSortCriteriaL( const TEmailSortCriteria& aCriteria );
+    
+    /**
+    * Adds a search key. Leaves KErrNotReady if search is ongoing.
+    */
+    void AddSearchKeyL( const TDesC& aSearchKey );
+                                                                  
+    /**
+    * Enables/disables search from remote email server.
+    * Leaves KErrNotReady if search is ongoing.
+    */
+    void SetRemoteSearchL( TBool aRemote );                                                               
+    
+    /**
+    * Indicates whether remote search is enabled.
+    */
+    TBool IsRemoteSearch() const;
+    
+    /**
+     * Starts search, all methods affecting search attribures leave
+     * KErrNotReady while search is ongoing.
+     * @param aObserver called when results are available.
+     */     
+    void StartSearchL( MEmailSearchObserver& aObserver );
+
+    /**
+     * Cancels search.
+     */
+    void Cancel();
+                                             
+    /** returns search status 
+      * @return search status:
+      *     < 0 : Search has failed
+      *     KRequestPending : search is ongoing. note that status may be
+      *         KRequestPending after HandleResultL callback because results 
+      *         may be given in chunks of results. Size of chunk depends on
+      *         implementation and may vary.
+      *     KErrNone : initial state, or search has finished
+      */
+    TInt Status() const;
+    
+    /**
+     * Resets all search attribures. Cancels search if ongoing. 
+     */
+    void Reset();
+    
+public:  // From MFSMailBoxSearchObserver
+    /** 
+     * Notifies the email search API client that a match has been found
+     * 
+     * @param aMatchMessage contains a pointer to the matched message.
+     *         Ownership is transfered to the observer.
+     *
+     */
+     void MatchFoundL( CFSMailMessage* aMatchMessage );
+
+    /**
+     * Notifies the email search API client that the search has completed
+     *
+     */
+     void SearchCompletedL();
+
+//
+    /**
+    * Asks client if search engine should change search priority 
+  	*/
+    void ClientRequiredSearchPriority(TInt *apRequiredSearchPriority); 
+//
+
+    
+private:
+    /**
+     * Constructor
+     */
+    CEmailMessageSearchAsync(
+        CPluginData& aPluginData,
+        const TMailboxId& aMailboxId );
+
+    void ConstructL();
+    
+    /**
+     * Function leaves if search is going on. Otherwise it doesn't do anything.
+     */
+    inline void IsSearchGoingOnL() const; 
+
+private:
+    
+    CPluginData&    iPluginData;
+    
+    CFSMailPlugin*  iPlugin;
+
+    TMailboxId      iMailboxId;
+    
+    TFSMailSortCriteria iCriteria;
+        
+    RPointerArray<TDesC> iSearchStrings;    
+
+    MEmailSearchObserver* iObserver;
+    
+    mutable RSemaphore iGate;
+
+    TBool iRemote;
+};
+
+#endif // EMAILMESSAGESEARCHASYNCIMPL_H_
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailmultipart.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of Email text content.
+*
+*/
+
+
+#ifndef EMAILMULTIPART_H_
+#define EMAILMULTIPART_H_
+// INCLUDES
+#include "cfsmailclient.h"
+#include <memailcontent.h>
+#include "emailapiutils.h"
+
+using namespace EmailInterface;
+
+class CEmailMessageContent;
+
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS( CEmailMultipart ) : public CBase,
+                                       public MEmailMultipart
+{
+public:
+    static CEmailMultipart* NewL( CPluginData& aPluginData, 
+            const TMessageContentId& aMsgContentId, 
+            CFSMailMessagePart* aPart,
+            const TDataOwner aOwner );
+    
+    ~CEmailMultipart();
+    
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+
+public: // from MEmailMessageContent
+    
+    TMessageContentId Id() const;
+
+    TPtrC ContentType() const;
+
+    void SetContentType( const TDesC& aContentType );
+
+    TPtrC ContentId() const;
+
+    void SetContentId( const TDesC& aContentId );
+
+    TPtrC ContentDescription() const;
+
+    void SetContentDescription( const TDesC& aContentDescription );
+
+    TPtrC ContentDisposition() const;
+
+    void SetContentDisposition( const TDesC& aContentDisposition );
+
+    TPtrC ContentClass() const;
+
+    void SetContentClass( const TDesC& aContentClass );
+
+    TInt AvailableSize() const;
+
+    TInt TotalSize() const;
+
+    TPtrC ContentL() const;
+
+    void SetContentL( const TDesC& aContent );
+
+    void FetchL( MEmailFetchObserver& aObserver );
+
+    void CancelFetch();
+
+    void SaveToFileL( const TDesC& aPath );
+
+    MEmailMultipart* AsMultipartOrNull() const;
+    
+    MEmailTextContent* AsTextContentOrNull() const;
+
+    MEmailAttachment* AsAttachmentOrNull() const;
+    
+public: // from MEmailMultipart
+    TInt PartCountL();
+
+    MEmailMessageContent* PartByIndexL( const TUint aIndex ) const;
+
+    void DeletePartL( const TUint aIndex );
+
+    void AddPartL(
+        const MEmailMessageContent& aPart,
+        const TUint aPos );
+    
+public: // for internal usage
+    void SetOwner( const TDataOwner aOwner );
+    
+    
+private:
+    CEmailMultipart( const TDataOwner aOwner );
+    
+    void ConstructL( CPluginData& aPluginData, const TMessageContentId& aMsgContentId, CFSMailMessagePart* aPart );
+    
+private: // Private data        
+    CEmailMessageContent* iEmailMsgContent;
+    RArray<TFSMailMsgId> iChildParts;
+    TUint iChildPartCount;
+    TDataOwner iOwner;
+};
+
+#endif // EMAILMULTIPART_H_
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/emailtextcontent.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Definition of Email text content.
+*
+*/
+
+
+#ifndef EMAILTEXTCONTENT_H_
+#define EMAILTEXTCONTENT_H_
+
+// INCLUDES
+#include "cfsmailclient.h"
+#include <memailcontent.h>
+#include "emailapiutils.h"
+
+using namespace EmailInterface;
+
+class CEmailMessageContent;
+// CLASS DECLARATION
+
+/**
+ *  CEmailTextContent
+ * 
+ */
+NONSHARABLE_CLASS( CEmailTextContent ) : public CBase,
+                                         public MEmailTextContent
+{   
+public:
+    static CEmailTextContent* NewL( CPluginData& aPluginData, 
+            const TMessageContentId& aMsgContentId, 
+            CFSMailMessagePart* aPart,
+            const TDataOwner aOwner );
+    
+    ~CEmailTextContent();
+    
+public: // from MEmailInterface
+    TEmailTypeId InterfaceId() const;
+    
+    void Release();
+
+public: // from MEmailTextContent
+    TTextType TextType() const;
+
+    void SetTextL(
+            const TTextType aPlainOrHtml,
+            const TDesC& aText );
+    
+public: // from MEmailMessageContent
+    
+    TMessageContentId Id() const;
+
+    TPtrC ContentType() const;
+
+    void SetContentType( const TDesC& aContentType );
+
+    TPtrC ContentId() const;
+
+    void SetContentId( const TDesC& aContentId );
+
+    TPtrC ContentDescription() const;
+
+    void SetContentDescription( const TDesC& aContentDescription );
+
+    TPtrC ContentDisposition() const;
+
+    void SetContentDisposition( const TDesC& aContentDisposition );
+
+    TPtrC ContentClass() const;
+
+    void SetContentClass( const TDesC& aContentClass );
+
+    TInt AvailableSize() const;
+
+    TInt TotalSize() const;
+
+    TPtrC ContentL() const;
+
+    void SetContentL( const TDesC& aContent );
+
+    void FetchL( MEmailFetchObserver& aObserver );
+
+    void CancelFetch();
+
+    void SaveToFileL( const TDesC& aPath );
+
+    MEmailMultipart* AsMultipartOrNull() const;
+    
+    MEmailTextContent* AsTextContentOrNull() const;
+
+    MEmailAttachment* AsAttachmentOrNull() const;
+    
+public: // for internal usage
+    void SetOwner( const TDataOwner aOwner );
+
+    
+private:
+    CEmailTextContent( const TDataOwner aOwner );
+    
+    void ConstructL( CPluginData& aPluginData, const TMessageContentId& aMsgContentId, CFSMailMessagePart* aPart);
+    
+private:        
+    TTextType               iTextType;
+    CEmailMessageContent*   iEmailMsgContent;
+    TDataOwner              iOwner;
+};
+
+#endif // EMAILTEXTCONTENT_H_
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/inc/messageiterator.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Email message iterator
+*
+*/
+
+#ifndef CMESSAGEITERATOR_H
+#define CMESSAGEITERATOR_H
+                                                                             
+#include <mmessageiterator.h>                                                                             
+#include "emailapidefs.h"
+#include "cfsmailcommon.h"
+
+using namespace EmailInterface;
+
+class MFSMailIterator;
+class CPluginData;
+class CFSMailMessage;
+class CEmailMessage;
+/**
+ * Iterator for email messages
+ * @since S60 v5.2
+ */
+NONSHARABLE_CLASS( CMessageIterator ) : public CBase, public MMessageIterator
+{
+public:
+    /**
+    * Constructor
+    * @param aIterator
+    * @param aPluginData
+    * @return new iterator
+    */
+    static CMessageIterator* NewL( MFSMailIterator* aIterator,
+                                   CPluginData& aPluginData,
+                                   TUint aCount );
+    
+    ~CMessageIterator();
+
+private:
+    CMessageIterator( MFSMailIterator* aIterator, CPluginData& aPluginData, TUint aCount );
+    
+    void ConstructL();
+    
+public: // from MEmailInterface              
+
+    TEmailTypeId InterfaceId() const;
+
+    void Release();
+    
+public: // from MMessageIterator
+
+    /** @see MMessageIterator */
+    MEmailMessage* NextL();
+    
+    /** @see MMessageIterator 
+     (not implemented) */
+    
+    MEmailMessage* PreviousL();
+    
+    TUint Count() const;
+        
+
+private:   
+    // Reads next chunk of messages from protocol plugin
+    TBool ReadNextChunkL();
+    TBool ReadPreviousChunkL();
+    MEmailMessage* ReadFromChunkL();
+    void CleanCache();    
+    void AddToCacheL( CFSMailMessage* aFsMsg );    
+private: // data
+    
+    /**
+    * Iterator internal states. "Consuming" in state names mean getting and 
+    * returning next message from the iterator.
+    */
+    enum TState {
+        // No messages available in iterator, read them from protocl plugin.
+        // NextL returns a message from chunk (or NULL if folder is empty)
+        // This is initial state.
+        EReadNextMessageChunk,
+        EReadPreviousMessageChunk,
+        
+        // Message(s) are available (retrieved from plugin). No remaining 
+        // messages excepted from the plugin. NextL returns a message from chunk.
+        EConsumeFromChunk,
+        
+        // Message(s) are available in chunk and more in protocol plugin.
+        EConsumeFromChunkWithMoreChunksToFollow,
+        
+        // Iterator is iterated throuh and NextL would return NULL.
+        EIteratorConsumed
+    };
+
+    // plugin iterator, owned
+    MFSMailIterator* iIterator;
+    
+    // reference to plugin data
+    CPluginData&    iPluginData;
+
+    CFSMailPlugin*  iPlugin;
+    
+    // message id used for reading messages from plugin
+    TFSMailMsgId    iStartMsgId;
+    
+    // Internal state  
+    TState           iState;
+    
+    // pointer array of messages read from protocol plugin (aka message chunk)
+    RPointerArray<CFSMailMessage> iFsMessageArray;
+    RPointerArray<CEmailMessage> iMessageArray;
+    
+    TUint iCount;
+    
+    TInt iCursor;
+    
+    TFSMailMsgId iFirstMsgId;
+    
+    TBool iHasMoreNextItems;
+    TBool iHasMorePrevItems;
+};
+
+#endif // CMESSAGEITERATOR_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/rom/emailclientapi.iby	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  (ROM) Image description file for emailclientapi
+*
+*/
+#include <data_caging_paths_for_iby.hrh>
+#ifdef FF_EMAIL_FRAMEWORK
+
+ECOM_PLUGIN( emailclientapi.dll, emailclientapi.rsc )
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailaddress.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailAddress.
+*
+*/
+
+#include "emailaddress.h"
+#include "cfsmailclient.h"
+#include "emailclientapi.hrh"
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailAddress* CEmailAddress::NewL( const TRole aRole, const TDataOwner aOwner )
+    {
+    CEmailAddress* self = new ( ELeave ) CEmailAddress( aRole, aOwner );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailAddress* CEmailAddress::NewLC( const TRole aRole, const TDataOwner aOwner )
+    {
+    CEmailAddress* self = CEmailAddress::NewL( aRole, aOwner );
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailAddress::~CEmailAddress()
+    {
+    iAddress.Close();
+    iDisplayName.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailAddress::CEmailAddress( const TRole aRole, const TDataOwner aOwner ) :
+    iRole( aRole ), 
+    iOwner( aOwner )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailAddress::InterfaceId() const
+    {
+    return KEmailIFUidAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailAddress::Release()
+    {
+    if ( iOwner == EClientOwns )
+        {
+        delete this;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailAddress::SetAddressL( const TDesC& aAddress )
+    {
+    iAddress.Close();
+    iAddress.CreateL( aAddress );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailAddress::Address() const
+    {    
+    return iAddress;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailAddress::SetDisplayNameL( const TDesC& aDisplayName )
+    {
+    iDisplayName.Close();
+    iDisplayName.CreateL( aDisplayName );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailAddress::DisplayName() const
+    {
+    return iDisplayName;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAddress::TRole CEmailAddress::Role() const
+    {
+    return iRole;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailAddress::SetRole( const TRole aRole )
+    {
+    iRole = aRole;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailapiutils.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailApiUtils.
+*
+*/
+
+#include <e32std.h>
+#include "cfsmailplugin.h"
+#include "emailapidefs.h"
+#include "emailclientapiimpldefs.h"
+#include "emailapiutils.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CPluginData::CPluginData( TUid aUid ) :
+    iData( aUid ),
+    iPluginLoadError( KErrNotReady )
+    { 
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CPluginData::~CPluginData()
+    {
+    // panic if a user of plugin has not called ReleaseInstance after ClaimInstance
+    __ASSERT_ALWAYS( iOwned || !iRefCount, Panic( EMailPanicPluginNotReleased ) );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CFSMailPlugin* CPluginData::ClaimInstance()
+    {
+    if ( !iData.iPlugin )
+        {
+        TRAP( iPluginLoadError, iData.iPlugin = CFSMailPlugin::NewL( iData.iUid ) );
+        }
+    if ( !iPluginLoadError )
+        {
+        iRefCount++;
+        }
+    return iData.iPlugin;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CFSMailPlugin* CPluginData::ClaimInstanceL()
+    {
+    ClaimInstance();
+    User::LeaveIfError( iPluginLoadError );
+    return iData.iPlugin;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CPluginData::ReleaseInstance()
+    {
+    if ( iData.iPlugin )
+        {
+        iRefCount--;
+        if ( !iRefCount )
+            {
+            delete iData.iPlugin;
+            iData.iPlugin = NULL;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CPluginData::ReleasePushL()
+    {
+    TCleanupItem item( &CPluginData::CleanupOperation, this );
+    CleanupStack::PushL( item );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CPluginData::CleanupOperation( TAny* aAny )
+    {
+    CPluginData* pdata = reinterpret_cast<CPluginData*>( aAny );
+    pdata->ReleaseInstance();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TUid CPluginData::Uid() const
+    {
+    return iData.iUid;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TInt CPluginData::LoadResult() const
+    {
+    return iPluginLoadError;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TFSMailMsgId FsMsgId( const CPluginData& aPluginData, const EmailInterface::TBaseId& aId )
+    {
+    TFSMailMsgId id( aPluginData.Uid(), aId.iId );
+    return id;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CleanupReleasePush::PushL( EmailInterface::MEmailInterface& aItem )
+    {
+    TCleanupItem item( &CleanupReleasePush::Release, &aItem );
+    CleanupStack::PushL( item );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CleanupReleasePush::Release( TAny *aPtr )
+    {
+    reinterpret_cast<EmailInterface::MEmailInterface*>( aPtr )->Release();
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailattachment.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,292 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailAttachment.
+*
+*/
+
+#include "emailattachment.h"
+#include "emailcontent.h"
+#include "emailclientapi.hrh"
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------/
+CEmailAttachment::CEmailAttachment( const TDataOwner aOwner ) : iOwner( aOwner )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailAttachment::~CEmailAttachment()
+    {
+    delete iEmailMsgContent;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailAttachment* CEmailAttachment::NewLC(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart *aAtt,
+        const TDataOwner aOwner )
+    {    
+    CEmailAttachment* self = new (ELeave) CEmailAttachment( aOwner );
+    CleanupStack::PushL( self );
+    self->ConstructL( aPluginData, aMsgContentId, aAtt );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailAttachment* CEmailAttachment::NewL(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart *aAtt,
+        const TDataOwner aOwner )
+    {
+    CEmailAttachment* self = CEmailAttachment::NewLC( aPluginData, aMsgContentId, aAtt, aOwner );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::ConstructL(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart *aAtt)
+    {
+    iEmailMsgContent = CEmailMessageContent::NewL( aPluginData, aMsgContentId, aAtt );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TInt CEmailAttachment::AvailableSize() const
+{
+    return iEmailMsgContent->AvailableSize();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::CancelFetch()
+{
+    iEmailMsgContent->CancelFetch();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::ContentL() const
+{
+    User::Leave(KErrNotSupported);
+    return iEmailMsgContent->ContentL();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::ContentClass() const
+{
+    return iEmailMsgContent->ContentClass();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::ContentDescription() const
+{
+    return iEmailMsgContent->ContentDescription();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::ContentDisposition() const
+{
+    return iEmailMsgContent->ContentDisposition();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::ContentId() const
+{
+    return iEmailMsgContent->ContentId();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::ContentType() const
+{
+    return iEmailMsgContent->ContentType();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::FetchL( MEmailFetchObserver & aObserver )
+{
+    iEmailMsgContent->FetchL( aObserver );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TMessageContentId CEmailAttachment::Id() const
+{
+    return iEmailMsgContent->Id();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailAttachment::InterfaceId() const
+    {
+    return KEmailIFUidAttachment;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::Release()
+    {
+    if ( iOwner == EClientOwns )
+        {    
+        delete this;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SaveToFileL( const TDesC& aPath )
+{
+    iEmailMsgContent->SaveToFileL( aPath );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SetContentClass( const TDesC& aContentClass )
+{
+    iEmailMsgContent->SetContentClass( aContentClass );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SetContentDescription( const TDesC& aContentDescription )
+{
+    iEmailMsgContent->SetContentDescription(aContentDescription);
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SetContentDisposition( const TDesC& aContentDisposition )
+{
+    iEmailMsgContent->SetContentDisposition( aContentDisposition );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SetContentId( const TDesC &aContentId )
+{
+    iEmailMsgContent->SetContentId( aContentId );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SetContentL( const TDesC &aContent )
+{
+    iEmailMsgContent->SetContentL( aContent );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailAttachment::SetContentType( const TDesC &aContentType )
+{
+    iEmailMsgContent->SetContentType( aContentType );
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TInt CEmailAttachment::TotalSize() const
+{
+    return iEmailMsgContent->TotalSize();
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailMultipart* CEmailAttachment::AsMultipartOrNull() const
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailTextContent* CEmailAttachment::AsTextContentOrNull() const
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailAttachment* CEmailAttachment::AsAttachmentOrNull() const
+    {
+    const MEmailAttachment* ptr = this;
+    return const_cast<MEmailAttachment *>( ptr );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+RFile CEmailAttachment::FileL() const
+    {
+    return iEmailMsgContent->Part().GetContentFileL();
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------/
+void CEmailAttachment::SetFileNameL( const TDesC& aFileName )
+    {
+    iEmailMsgContent->Part().SetAttachmentNameL( aFileName );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailAttachment::FileNameL() const
+    {
+    return iEmailMsgContent->Part().AttachmentNameL();
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailclientapiimpl.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,425 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailClientApi.
+*
+*/
+
+
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <viewclipartner.h>
+#include <vwsdefpartner.h>
+#else
+#include <viewcli.h>
+#include <vwsdef.h>
+#endif // SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <centralrepository.h>
+#include "emailclientapiimpl.h"
+#include "emailapiutils.h"
+#include "emailmailbox.h"
+#include <memailaddress.h>
+#include "cfsmailplugin.h"
+#include "cfsmailclient.h"
+#include "emailclientapiimpldefs.h"
+#include "emailmailboxcache.h"
+#include "emailclientapi.hrh"
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+MEmailMailbox* CEmailClientApi::MailboxL( const TMailboxId& aId )
+    {
+    UpdateMailboxInfoCacheL();
+    CPluginData* pluginData = MailboxInfoCacheL().PluginDataL( aId );
+    MEmailMailbox* mailbox = NULL;
+    if ( pluginData )
+        {
+        mailbox = CEmailMailbox::NewL( *pluginData, aId );
+        }
+    return mailbox;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMailbox* CEmailClientApi::MailboxL( const TPtrC& aAddress )
+    {
+    MEmailMailbox* mailbox = NULL;
+    REmailMailboxIdArray mailboxes;
+    CleanupClosePushL( mailboxes );
+    TInt count( GetMailboxIdsL( mailboxes ) );
+    while ( count-- )
+        {
+        const TMailboxId mailboxId = mailboxes[count];
+        MEmailMailbox* refMailbox = MailboxL( mailboxId );
+        if ( refMailbox )
+            {
+            TPtrC address( refMailbox->AddressL()->Address() );
+            if ( !address.Compare( aAddress ) )
+                {
+                mailbox = refMailbox; // addresses match
+                count = 0;
+                }
+            else
+                {
+                refMailbox->Release();
+                }
+            }
+        }
+    CleanupStack::PopAndDestroy( &mailboxes );
+    // find mailbox or leave KErrNotFound
+    if ( !mailbox )
+        {
+        User::Leave( KErrNotFound );
+        }
+    return mailbox;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailClientApi::GetMailboxIdsL( 
+    REmailMailboxIdArray& aMailboxes )
+    {
+    UpdateMailboxInfoCacheL();
+
+    aMailboxes.Reset();
+    CEmailMailboxCache& mbcache = MailboxInfoCacheL();
+    mbcache.GetIdsL( aMailboxes ); 
+
+    const TInt mailboxesFound( aMailboxes.Count() );
+    return mailboxesFound;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailClientApi::GetMailboxesL( RMailboxPtrArray& aMailboxes )
+    {
+    REmailMailboxIdArray mailboxIdArray;
+    CleanupClosePushL( mailboxIdArray );
+
+    // GetMailboxIdsL loads plugin and keeps loaded if it contains at
+    // least one mailbox
+    TInt count = GetMailboxIdsL( mailboxIdArray );
+    while ( count-- )
+        {
+        // mailbox creation increases plugin ref count by one
+        MEmailMailbox* mailbox = MailboxL( mailboxIdArray[count] );
+        CleanupReleasePushL( *mailbox );
+        aMailboxes.AppendL( mailbox );
+        CleanupStack::Pop( mailbox );
+        }
+    // Created mailboxes still hold plugin references so we can decrease 
+    // ref count.
+    ReleaseAllPlugins(); 
+    
+    CleanupStack::PopAndDestroy( &mailboxIdArray );
+    return aMailboxes.Count();
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailClientApi::LaunchEmailL( const TLaunchPolicy /*aPolicy*/ )
+    {
+    User::Leave(KErrNotSupported);
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CPluginData* CEmailClientApi::TPluginIterator::Next()
+    {
+    CPluginData* item = NULL;
+    if ( iIndex < iArray.Count() )
+        {
+        item = iArray[ iIndex++ ];
+        }
+    return item;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailClientApi* CEmailClientApi::NewL()
+    {
+    CEmailClientApi* instance = static_cast<CEmailClientApi*>( Dll::Tls() );
+
+    if ( !instance )
+        {
+        instance = new ( ELeave ) CEmailClientApi();
+        CleanupStack::PushL( instance );
+        instance->ConstructL();
+        User::LeaveIfError( Dll::SetTls( instance ) );
+        CleanupStack::Pop( instance );
+        }
+
+    instance->iInstanceCounter++;
+
+    return instance;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailClientApi::~CEmailClientApi()
+    {
+    // ensure this doesn't held plugin references
+    ReleaseAllPlugins();
+
+    // ResetAndDestroy doesn't work because ~CPluginData is private
+    TInt count( iPluginDataArray.Count() );
+    while ( count-- )
+        {
+        delete iPluginDataArray[count];
+        }
+    iPluginDataArray.Close();
+    iLoadedPluginsArray.Close();
+    delete iMailboxCache;
+
+    Dll::FreeTls();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailClientApi::CEmailClientApi() : iInstanceCounter( 0 )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailClientApi::CleanupImplInfoPushL( RPointerArray<CImplementationInformation>& aArray )
+    {
+    TCleanupItem item( &CEmailClientApi::CleanupImplInfo, &aArray );
+    CleanupStack::PushL( item );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailClientApi::CleanupImplInfo( TAny* aAny )
+    {
+    RPointerArray<CImplementationInformation>* array = 
+        reinterpret_cast<RPointerArray<CImplementationInformation>*>( aAny );
+    array->ResetAndDestroy();
+    }
+ 
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailClientApi::ConstructL()
+    {
+    RPointerArray<CImplementationInformation> implInfoArray;
+    REComSession::ListImplementationsL( KFSMailPluginInterface, implInfoArray );
+    CleanupImplInfoPushL( implInfoArray );
+    TInt err = KErrNone;
+    TInt count( implInfoArray.Count() );
+    // add implementation UIDs to plugin info array, no instantiation at this
+    // phase
+    while ( count-- )
+        {
+        const CImplementationInformation* info = implInfoArray[count];
+        CPluginData* pluginData = new ( ELeave ) CPluginData( info->ImplementationUid() );
+        err = iPluginDataArray.Append( pluginData );
+        if ( err != KErrNone )
+            {
+            // failed to append, give up
+            delete pluginData;
+            count = 0;
+            }
+        }
+    iMailClient =  CFSMailClient::NewL();
+    CleanupStack::PopAndDestroy( &implInfoArray );
+    User::LeaveIfError( err );    
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailClientApi::InterfaceId() const
+    {
+    return KEmailClientApiInterface;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailClientApi::Release()
+    {
+    if( this->iInstanceCounter == 1 )
+        {
+        delete this;
+        }
+    else
+        {
+        this->iInstanceCounter--;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Returns plugin instance from plugin data. If we already have "claimed"
+// instance once, prevent increment of reference count 
+// -----------------------------------------------------------------------------
+CFSMailPlugin* CEmailClientApi::UsePlugin( CPluginData& aPluginData )
+    {
+    // use 'data' as search key for IndexOfLoadedPluginData()
+    TPluginData data( aPluginData.Uid() );
+    TPluginData* pluginDataPtr = &data;
+    // check if we have plugin already "in use".
+    const TInt index( IndexOfLoadedPluginData( data ) );
+    if ( index == KErrNotFound )
+        { // we don't have plugin instance so take it and add to loaded plugins
+        data.iPlugin = aPluginData.ClaimInstance();
+        if ( data.iPlugin && iLoadedPluginsArray.Append( data ) != KErrNone )
+            {                
+            aPluginData.ReleaseInstance(); // failed to append, don't proceed..
+            data.iPlugin = NULL;           // but return null
+            }          
+        }
+    else
+        {
+        // already in use, obtain plugin pointer from the array
+        pluginDataPtr = &iLoadedPluginsArray[index];
+        }
+    return pluginDataPtr->iPlugin;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailClientApi::ReleasePlugin( CPluginData& aPluginData )
+    {
+    // release plugin but only if it is not already claimed
+    TPluginData data( aPluginData.Uid() );
+    const TInt index( IndexOfLoadedPluginData( data ) );
+     if ( index != KErrNotFound )
+        {
+        aPluginData.ReleaseInstance();
+        iLoadedPluginsArray.Remove( index );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailClientApi::ReleaseAllPlugins()
+    {
+    for ( TInt i = 0; i < iPluginDataArray.Count(); i++ )
+        {
+        CPluginData* pdata = iPluginDataArray[i];
+        ReleasePlugin( *pdata );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMailboxCache& CEmailClientApi::MailboxInfoCacheL()
+    {
+    if ( !iMailboxCache)
+        {
+        iMailboxCache = CEmailMailboxCache::NewL();
+        }
+    return *iMailboxCache;
+    }
+
+// -----------------------------------------------------------------------------
+// Lists all mailboxes in protocol plugins and adds them to cache. Plugins may 
+// not be loaded so loading is done. The plugin is kept in memory if it contains
+// at least one mailbox to avoid loading again later as typical use case is 
+// creation of a mailbox object => the plugin is again needed 
+//( see ::GetMailboxesL which calls ReleaseAllPlugins()
+// -----------------------------------------------------------------------------
+void CEmailClientApi::UpdateMailboxInfoCacheL()
+    {
+    CEmailMailboxCache& mbcache = MailboxInfoCacheL();
+    if ( !mbcache.IsCached() )
+        {
+        // cache update needed
+        mbcache.StartCachingPushL();
+        TPluginIterator iter( iPluginDataArray );
+        CPluginData* pluginData = iter.Next();
+        while ( pluginData )
+            {
+            TBool containsMailbox( EFalse );
+            // loads plugin if needed
+            CFSMailPlugin* plugin = UsePlugin( *pluginData );
+            if ( plugin )
+                {
+                // if one plugin fails, it should not block other plugins
+                // ==> trap it             
+                
+                TRAPD( err, containsMailbox = CachePluginMailboxesL(
+                    *pluginData, 
+                    *plugin ) );
+                if ( !containsMailbox || err )
+                    {
+                    // plugins with no mailboxes (or failed to cache) is
+                    // released (unloaded) to optimize RAM usage.
+                    ReleasePlugin( *pluginData );
+                    }            
+                }
+            else if ( pluginData->iPluginLoadError == KErrNoMemory )
+                {
+                // don't continue if OOM
+                User::Leave( KErrNoMemory );
+                }
+            pluginData = iter.Next();
+            }
+        mbcache.EndCachingPop();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TBool CEmailClientApi::CachePluginMailboxesL( CPluginData& aPluginData, CFSMailPlugin& aPlugin )
+    {
+    TBool containsMailbox( EFalse );
+    RArray<TFSMailMsgId> pluginMailboxes;
+    CleanupClosePushL( pluginMailboxes );
+    aPlugin.ListMailBoxesL( pluginMailboxes );
+    TInt mailboxCount = pluginMailboxes.Count();
+    while ( mailboxCount-- )
+        {
+        const TFSMailMsgId& mailboxId = pluginMailboxes[mailboxCount];
+        TMailboxId id( mailboxId.Id() );
+        MailboxInfoCacheL().AddMailboxL( aPluginData, id );
+        containsMailbox = ETrue;
+        }
+    CleanupStack::PopAndDestroy( &pluginMailboxes );
+    return containsMailbox;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailClientApi::IndexOfLoadedPluginData( const TPluginData& aPluginData ) const
+    {
+    TIdentityRelation<TPluginData> relation( CEmailClientApi::PluginDataEquals );
+    return iLoadedPluginsArray.Find( aPluginData, relation );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TBool CEmailClientApi::PluginDataEquals( const TPluginData& a1, const TPluginData& a2 )
+    {
+    return ( a1.iUid == a2.iUid );
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailcontent.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,412 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailContent.
+*
+*/
+
+#include <apmstd.h>
+
+#include "emailcontent.h"
+#include "cfsmailclient.h"
+#include "emailclientapi.hrh"
+#include "emailapiutils.h"
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMessageContent* CEmailMessageContent::NewL( 
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart* aPart )    
+    {
+
+    CEmailMessageContent* self = new ( ELeave ) 
+        CEmailMessageContent( aPluginData, aMsgContentId, aPart );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CFSMailMessagePart& CEmailMessageContent::Part()
+    {
+    return *iPart;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetPart( CFSMailMessagePart* aPart )
+    {
+    iPart = aPart;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CPluginData& CEmailMessageContent::PluginData()
+    {
+    return iPluginData;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::ConstructL()
+    {
+    iPlugin = iPluginData.ClaimInstanceL();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMessageContent::~CEmailMessageContent()
+    {
+    iPluginData.ReleaseInstance();
+    delete iPart;
+    delete iBuf;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMessageContent::CEmailMessageContent(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart* aPart):
+        iPluginData( aPluginData ), 
+        iPart( aPart ), 
+        iMsgContentId( aMsgContentId ), 
+        iBuf( NULL ), 
+        iUsed( 0 )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TEmailTypeId CEmailMessageContent::InterfaceId() const
+    {
+    return KEmailIFUidMessageContent;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::Release()
+    {
+    delete this;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TMessageContentId CEmailMessageContent::Id() const
+    {
+    return iMsgContentId;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TPtrC CEmailMessageContent::ContentType() const
+    {
+    if (iPart)
+        {
+        return iPart->GetContentType();
+        } 
+    else
+        {
+        return TPtrC(0,0);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetContentType( const TDesC& aContentType )
+    {
+    if (iPart)
+        iPart->SetContentType( aContentType );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TPtrC CEmailMessageContent::ContentId() const
+    {
+    if (iPart)
+        {
+        return iPart->ContentID();
+        }
+    else
+        {
+        return TPtrC(0,0);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetContentId( const TDesC& aContentId )
+    {
+    if (iPart)
+        TRAP_IGNORE( iPart->SetContentIDL( aContentId ) );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TPtrC CEmailMessageContent::ContentDescription() const
+    {
+    if (iPart)
+        {
+        return iPart->ContentDescription();
+        }
+    else
+        {
+        return TPtrC(0,0);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetContentDescription( 
+    const TDesC& aContentDescription )
+    {
+    if (iPart)
+        iPart->SetContentDescription( aContentDescription );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TPtrC CEmailMessageContent::ContentDisposition() const
+    {
+    if (iPart)
+        {
+        return iPart->ContentDisposition();
+        }
+    else
+        {
+        return TPtrC(0,0);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetContentDisposition( 
+    const TDesC& aContentDisposition )
+    {
+    if (iPart)
+        iPart->SetContentDisposition( aContentDisposition );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TPtrC CEmailMessageContent::ContentClass() const
+    {
+    if (iPart)
+        {
+        return iPart->GetContentClass();
+        }
+    else
+        {
+        return TPtrC(0,0);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetContentClass( const TDesC& aContentClass )
+    {
+    if (iPart)
+        iPart->SetContentClass( aContentClass );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TInt CEmailMessageContent::AvailableSize() const
+    {
+    if (iPart)
+        {
+        return iPart->FetchedContentSize();
+        }
+    else
+        {
+        return 0;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TInt CEmailMessageContent::TotalSize() const
+    {
+    if (iPart)
+        {
+        return iPart->ContentSize();
+        }
+    else
+        {
+        return 0;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TPtrC CEmailMessageContent::ContentL() const
+    {
+    TInt size = AvailableSize();
+    TPtr16 ptr( 0, size );
+    if ( size != 0 )
+        {
+        if ( !iBuf )
+            {
+            iBuf = HBufC::NewL( size );
+            }
+        
+        if ( size > ptr.MaxLength() )
+            {
+            iBuf = iBuf->ReAlloc( size );
+            }
+        ptr.Set( iBuf->Des() );
+        iPart->GetContentToBufferL( ptr, iUsed );
+        iUsed += size;
+        }
+    return ptr;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SetContentL( const TDesC& aContent )
+    {
+    User::LeaveIfNull( iPart );
+    iPart->SetContentSize( aContent.Length() );
+    iPart->SetFetchedContentSize( aContent.Length() );
+    iPlugin->SetContentL( aContent, 
+            FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId.iMailboxId ),
+            FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId ),
+            FsMsgId( iPluginData, iMsgContentId.iMessageId ),
+            FsMsgId( iPluginData, iMsgContentId ) );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::FetchL( MEmailFetchObserver&  aObserver )
+    {
+    User::LeaveIfNull( iPart );
+    const TFSMailMsgId fsId = FsMsgId(iPluginData, iMsgContentId);
+    if ( !iFetchObserver )
+        {
+        iFetchObserver = new ( ELeave ) CContentRequestObserver( *this );
+        }
+    iFetchObserver->SetObserverL( &aObserver );
+    iRequestId = iPart->FetchMessagePartL( fsId, *iFetchObserver, TUint( 0 ) );
+
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::CancelFetch()
+    {
+    TRAP_IGNORE( iPlugin->CancelL( iRequestId ) );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::SaveToFileL( const TDesC& aPath )
+    {
+    iPlugin->CopyMessagePartFileL(
+        FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId.iMailboxId ),
+        FsMsgId( iPluginData, iMsgContentId.iMessageId.iFolderId ),
+        FsMsgId( iPluginData, iMsgContentId.iMessageId ),
+        FsMsgId( iPluginData, iMsgContentId ),
+        aPath );
+    }
+
+/* Dummy implementations, not ever called */
+MEmailMultipart* CEmailMessageContent::AsMultipartOrNull() const 
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+MEmailTextContent* CEmailMessageContent::AsTextContentOrNull() const
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+MEmailAttachment* CEmailMessageContent::AsAttachmentOrNull() const
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMessageContent::CContentRequestObserver::CContentRequestObserver( 
+    CEmailMessageContent& aParent ) : iObserver( NULL ), iParent( aParent )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::CContentRequestObserver::RequestResponseL( 
+    TFSProgress aEvent, TInt /* aRequestId */ )
+    {
+    if ( aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
+        {
+        delete iParent.iPart;
+        iParent.iPart = NULL;
+        CFSMailMessagePart *part = iParent.iPlugin->MessagePartL( 
+            FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId.iFolderId.iMailboxId ),
+            FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId.iFolderId ),
+            FsMsgId( iParent.iPluginData, iParent.iMsgContentId.iMessageId ),
+            FsMsgId( iParent.iPluginData, iParent.iMsgContentId ) );
+        iParent.SetPart( part );
+
+        if ( iObserver ) 
+            iObserver->DataFetchedL( aEvent.iError );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMessageContent::CContentRequestObserver::SetObserverL( MEmailFetchObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailfolder.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,278 @@
+/*
+* Copyright (c)2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailFolder.
+*
+*/
+
+#include "emailfolder.h"
+#include "emailmailbox.h"
+#include "emailapiutils.h"
+#include "messageiterator.h"
+#include "emailsorting.h"
+#include "cfsmailfolder.h"
+#include "cfsmailplugin.h"
+#include "emailclientapi.hrh"
+#include "emailclientapiimpldefs.h"
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailFolder* CEmailFolder::NewLC( 
+    CPluginData& aPluginData,
+    const TFolderId& aFolderId,  
+    CFSMailFolder *aFolder )
+    {
+    CEmailFolder* self = new ( ELeave ) 
+        CEmailFolder( aPluginData, aFolderId, aFolder );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailFolder* CEmailFolder::NewL( 
+    CPluginData& aPluginData,
+    const TFolderId& aFolderId,  
+    CFSMailFolder *aFolder )
+    {
+    CEmailFolder* self = CEmailFolder::NewLC( aPluginData, aFolderId, aFolder);
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailFolder::CEmailFolder( 
+    CPluginData& aPluginData, 
+    const TFolderId& aFolderId,
+    CFSMailFolder* aFolder) : 
+    iPluginData( aPluginData ), 
+    iFolderType( EOther ), 
+    iFolderId( aFolderId ),
+    iFolder( aFolder )
+    {
+    }
+   
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailFolder::ConstructL()
+    {
+    iPlugin = iPluginData.ClaimInstance();
+    
+    User::LeaveIfNull( iFolder );
+    
+    const TFSFolderType fsType = iFolder->GetFolderType();
+    switch ( fsType )
+        {
+        case EFSInbox:
+            iFolderType = EInbox;
+            break;
+        case EFSOutbox:
+            iFolderType = EOutbox;
+            break;
+        case EFSDraftsFolder:
+            iFolderType = EDrafts;
+            break;
+        case EFSSentFolder:
+            iFolderType = ESent;
+            break;
+        case EFSDeleted:
+            iFolderType = EDeleted;
+            break;
+        case EFSOther:
+        default:
+            iFolderType = EOther;
+            break;
+        }
+    iParentId = TFolderId( 
+        iFolder->GetParentFolderId().Id(), 
+        iFolderId.iMailboxId );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailFolder::~CEmailFolder()
+    {
+    iPluginData.ReleaseInstance();
+    delete iFolder;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailFolder::InterfaceId() const
+    {
+    return KEmailIFUidFolder;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailFolder::Release()
+    {
+    delete this;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TFolderId CEmailFolder::FolderId() const
+    {
+    return iFolderId;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TFolderId CEmailFolder::ParentFolderId() const
+    {
+    return iParentId;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TFolderType CEmailFolder::FolderType() const
+    {
+    return iFolderType;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailFolder::Name() const
+    {
+    if ( !iFolder )
+        return KNullDesC();
+    return TPtrC ( iFolder->GetFolderName() );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailFolder::GetSubfoldersL( RFolderArray& aSubfolders ) const
+    {
+    User::LeaveIfNull( iFolder );
+
+    RPointerArray<CFSMailFolder> folders;
+    CleanupResetAndDestroy<RPointerArray<CFSMailFolder> >::PushL( folders );
+
+    iFolder->GetSubFoldersL( folders );
+    
+    TInt res( folders.Count() );
+    
+    for ( TInt i = 0; i < res; i++ )
+        {
+        const CFSMailFolder* fsfolder = folders[i];
+        const TEntryId id = fsfolder->GetFolderId().Id();
+        const TFolderId folderId( id, iFolderId.iMailboxId.iId );
+        MEmailFolder* folder = CEmailFolder::NewL( iPluginData, folderId, folders[i] );
+        aSubfolders.AppendL( folder );
+        }
+    CleanupStack::Pop( &folders );
+    folders.Close();
+    return res;
+    }
+
+// -----------------------------------------------------------------------------
+//  CEmailFolder::MessagesL
+// -----------------------------------------------------------------------------
+MMessageIterator* CEmailFolder::MessagesL(
+        const RSortCriteriaArray& aCriteria )
+    {
+    RArray<TFSMailSortCriteria> sortCriterias;
+    CleanupClosePushL( sortCriterias );
+    CEmailFolder::ToFsSortCriteriaL( aCriteria, sortCriterias );
+
+    MFSMailIterator* fsIter = iFolder->ListMessagesL( EFSMsgDataEnvelope, sortCriterias );
+    TUint count = iFolder->GetMessageCount();
+
+    CleanupStack::PopAndDestroy( &sortCriterias );
+    CMessageIterator* iter = CMessageIterator::NewL( 
+        fsIter, iPluginData, count );
+
+    return iter;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailFolder::DeleteMessagesL( const REmailMessageIdArray& aMessageIds )
+    {
+    RArray<TFSMailMsgId> fsArray;
+    CleanupClosePushL( fsArray );
+    const TInt count( aMessageIds.Count() );
+    for ( TInt i = 0; i < count; i++ )
+        {
+        TMessageId msgId = aMessageIds[i];
+        if ( iFolderId != msgId.iFolderId )
+            {
+            // not all messages in the same folder, plugin API doesn't accept this.
+            User::Leave( KErrArgument );
+            }
+        fsArray.AppendL( FsMsgId( iPluginData, msgId ) );
+        }
+    iPlugin->DeleteMessagesByUidL( 
+            FsMsgId( iPluginData, iFolderId.iMailboxId ), 
+            FsMsgId( iPluginData, iFolderId ), 
+            fsArray );
+    CleanupStack::PopAndDestroy( &fsArray );
+    }
+
+// -----------------------------------------------------------------------------
+// Maps email api sort criteria to sort criteria type that protocol plugin
+// accepts.
+// -----------------------------------------------------------------------------
+void CEmailFolder::ToFsSortCriteriaL( 
+    const RSortCriteriaArray& aSortCriteria, 
+    RArray<TFSMailSortCriteria>& aFsCriteria )
+    {
+    const TFSMailSortField fieldValues[] = {
+        EFSMailDontCare,        
+        EFSMailSortByDate,      
+        EFSMailSortBySender,    
+        EFSMailSortByRecipient, 
+        EFSMailSortBySubject,   
+        EFSMailSortByPriority,  
+        EFSMailSortByFlagStatus,
+        EFSMailSortByUnread,    
+        EFSMailSortBySize,      
+        EFSMailSortByAttachment };
+
+    for ( TInt i=0; i < aSortCriteria.Count(); i++ )
+        {
+        const TEmailSortCriteria& criteria  = aSortCriteria[i];
+        __ASSERT_ALWAYS( criteria.iField < sizeof( fieldValues ) / sizeof (fieldValues [i] ),
+            Panic( EMailPanicSortMapIndexOutOfBounds ) );
+        TFSMailSortCriteria fsCriteria;
+        fsCriteria.iField = fieldValues[ criteria.iField ];
+        if ( criteria.iAscending )
+            {
+            fsCriteria.iOrder = EFSMailAscending;
+            }
+        else
+            {
+            fsCriteria.iOrder = EFSMailDescending;
+            }
+        aFsCriteria.AppendL( fsCriteria );
+        }
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailinterfacefactoryimpl.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,216 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailInterfaceFactoryImpl.
+*
+*/
+
+#include <e32property.h>                // RProperty
+#include <s32mem.h>                     // RDesRead/WriteStream
+
+#include "emailinterfacefactoryimpl.h"
+#include "emailcontent.h"
+#include "cfsmailclient.h"
+#include "emailclientapiimpldefs.h"
+#include "emailclientapiimpl.h"
+#include "emailaddress.h"
+#include "emailmessagesearch.h"
+#include "emailshutdownconst.h"
+
+_LIT( KEmailImplPanic, "Email client API" );
+const TInt KEmailUidExtraBuffer = 2 * KEmailPlatformApiUidItemSize;
+
+// ---------------------------------------------------------------------------
+// Email client API panic wrapper
+// ---------------------------------------------------------------------------
+void Panic( TEmailImplPanic aPanic )
+    {
+    User::Panic( KEmailImplPanic(), aPanic );
+    }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CEmailInterfaceFactoryImpl::NewL
+// ---------------------------------------------------------------------------
+CEmailInterfaceFactoryImpl* CEmailInterfaceFactoryImpl::NewL()
+    {
+    CEmailInterfaceFactoryImpl* self = new (ELeave) CEmailInterfaceFactoryImpl();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailInterfaceFactoryImpl::~CEmailInterfaceFactoryImpl
+// ---------------------------------------------------------------------------
+CEmailInterfaceFactoryImpl::~CEmailInterfaceFactoryImpl()
+    {
+    TRAP_IGNORE( AppendOrRemoveUidL( EEmailUidModeRemove ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailInterfaceFactoryImpl::CEmailInterfaceFactoryImpl
+// ---------------------------------------------------------------------------
+CEmailInterfaceFactoryImpl::CEmailInterfaceFactoryImpl() : 
+    CEmailInterfaceFactory()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailInterfaceFactoryImpl::ConstructL
+// ---------------------------------------------------------------------------
+void CEmailInterfaceFactoryImpl::ConstructL()
+    {
+	// This leaves if related P&S keys are not defined by EmailServerMonitor,
+	// so EmailServerMonitor need to be started before using client API.
+	// TRAP_IGNORE should be removed after EmailServerMonitor is added to
+	// starter list.
+    TRAP_IGNORE( AppendOrRemoveUidL( EEmailUidModeAppend ) );
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailInterfaceFactoryImpl::InterfaceL
+// ---------------------------------------------------------------------------
+MEmailInterface* CEmailInterfaceFactoryImpl::InterfaceL( const TInt aInterfaceId )
+    {
+    MEmailInterface* interface = NULL;
+    switch ( aInterfaceId )
+        {
+        case KEmailClientApiInterface:
+            interface = CEmailClientApi::NewL();
+            break;
+        case KEmailIFUidAddress:
+            interface = CEmailAddress::NewL( MEmailAddress::EUndefined, EClientOwns );
+            break;
+        case KEmailIFUidTextContent:
+        default:
+            break;
+        }
+    if ( !interface )
+        {
+        User::Leave( KErrNotSupported );
+        }
+    return interface;
+    }
+
+// ---------------------------------------------------------------------------
+// CEmailInterfaceFactoryImpl::AppendOrRemoveUidL
+// ---------------------------------------------------------------------------
+void CEmailInterfaceFactoryImpl::AppendOrRemoveUidL(
+        const TEmailUidAppendRemoveMode aMode )
+    {
+    // Read buffer length
+    TInt bufLength( 0 );
+    User::LeaveIfError( RProperty::Get( KEmailShutdownPsCategory,
+                                        EEmailPsKeyPlatformApiAppsToCloseLength,
+                                        bufLength ) );
+
+    // Allocate buffer for reading and then read the list of UIDs from P&S.
+    // Adding some extra buffer just in case the size key and actual list
+    // are out of sync. This shouldn't happen, but you never know.
+    HBufC8* readBuf = HBufC8::NewLC( bufLength + KEmailUidExtraBuffer );
+    TPtr8 readPtr = readBuf->Des();
+    
+    User::LeaveIfError( RProperty::Get( KEmailShutdownPsCategory,
+                                        EEmailPsKeyPlatformApiAppsToClose,
+                                        readPtr ) );
+    
+    // For writing get the size of the original buffer + room for our own UID
+    // if needed
+    TInt writeBufSize = readPtr.Length();
+    if( aMode == EEmailUidModeAppend )
+        {
+        writeBufSize += KEmailPlatformApiUidItemSize;
+        }
+    
+    HBufC8* writeBuf = HBufC8::NewLC( writeBufSize );
+    TPtr8 writePtr = writeBuf->Des();
+
+    // Read and write streams used to read/write the UIDs from/to descriptors
+    RDesReadStream readStream( readPtr );
+    CleanupClosePushL( readStream );
+
+    RDesWriteStream writeStream( writePtr );
+    CleanupClosePushL( writeStream );
+
+    // Get our own process UID
+    RProcess ownProcess;
+    TUid ownUid = ownProcess.SecureId();
+    ownProcess.Close();
+
+    TInt itemsCount = readPtr.Length() / KEmailPlatformApiUidItemSize;
+
+    TBool ownUidFound = EFalse;
+    TInt writeLength = 0;
+    for ( TInt ii = 0;ii < itemsCount; ++ii )
+        {
+        // Read next UID from the stream
+        TUid item = TUid::Uid( readStream.ReadInt32L() );
+        
+        // We can skip our own UID. If we are removing, then we don't want
+        // our UID to be written. If we are adding, we don't need to set
+        // the new values as our UID already exists in the list.
+        if( item == ownUid )
+            {
+            ownUidFound = ETrue;
+            if( aMode == EEmailUidModeAppend )
+                {
+                // Our own UID is already in the list, so no need to update
+                // the list. Hence we can quit here.
+                break;
+                }
+            }
+        else
+            {
+            writeStream.WriteInt32L( item.iUid );
+            writeLength += KEmailPlatformApiUidItemSize;
+            }
+        }
+
+    // If we are appending our UID and it wasn't found from the list,
+    // write it to the stream
+    if( aMode == EEmailUidModeAppend && !ownUidFound )
+        {
+        writeStream.WriteInt32L( ownUid.iUid );
+        writeLength += KEmailPlatformApiUidItemSize;
+        }
+
+    // Set correct length for the write ptr buffer as it might not be
+    // updated correctly by the write stream
+    writePtr.SetLength( writeLength );
+
+    // Set new values to P&S only if something has changed, so either:
+    // 1) We are appending our UID and it didn't exist before
+    // 2) We are removing our UID and it did exist before
+    if( ( aMode == EEmailUidModeAppend && !ownUidFound ) ||
+        ( aMode == EEmailUidModeRemove && ownUidFound ) )
+        {
+        // Write first the UID list as it is more probable to fail, writing
+        // plain integer value shouldn't fail in any case. This way these
+        // values stay in sync also in case of error, as the list length
+        // gets updated only if the list itself is updated succesfully.
+        User::LeaveIfError( RProperty::Set( KEmailShutdownPsCategory,
+                        EEmailPsKeyPlatformApiAppsToClose,
+                        writePtr ) );
+
+        User::LeaveIfError( RProperty::Set( KEmailShutdownPsCategory,
+                        EEmailPsKeyPlatformApiAppsToCloseLength,
+                        writeLength ) );
+        }
+
+    CleanupStack::PopAndDestroy( 4, readBuf );
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailmailbox.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,662 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailMailbox.
+*
+*/
+
+#include <e32cmn.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <viewclipartner.h>
+#include <vwsdefpartner.h>
+#else
+#include <viewcli.h>
+#include <vwsdef.h>
+#endif // SYMBIAN_ENABLE_SPLIT_HEADERS
+
+#include <mmailboxsyncobserver.h>
+#include "emailmailbox.h"
+#include "emailapiutils.h"
+#include "emailaddress.h"
+#include "emailfolder.h"
+#include "emailmessage.h"
+#include "emailmessagesearch.h"
+#include "cfsmailclient.h"
+#include "emailclientapiimpl.h"
+#include "cfsmailplugin.h"
+#include "cfsmailbox.h"
+#include "cfsmailfolder.h"
+#include "emailclientapi.hrh"
+
+#include <XQServiceRequest.h>
+#include "email_services_api.h"
+
+// Constants
+
+#include <QStringList>
+
+_LIT( KNewLine, "\n" );
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailMailbox* CEmailMailbox::NewL(
+    CPluginData& aPluginData,
+    const TMailboxId& aMailboxId )
+    {
+    CEmailMailbox* self = new ( ELeave ) CEmailMailbox( aPluginData, aMailboxId );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailMailbox::CEmailMailbox(
+    CPluginData& aPluginData,
+    const TMailboxId& aMailboxId )
+    : iPluginData( aPluginData ),
+    iMailboxId( aMailboxId.iId )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::ConstructL()
+    {
+    iPlugin = iPluginData.ClaimInstanceL();
+    iEventMapper = new ( ELeave ) TObserverEventMapper(
+        iPlugin, iPluginData.Uid(), iMailboxId );
+    iFsMailbox = iPlugin->GetMailBoxByUidL( FsMailboxId() );
+    iSyncObserver = new ( ELeave ) CEmailMailbox::CEmailRequestObserver();
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailMailbox::~CEmailMailbox()
+    {
+    delete iFsMailbox;
+    delete iEventMapper;
+    delete iAddress;
+    iPluginData.ReleaseInstance();
+    delete iSyncObserver;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailMailbox::InterfaceId() const
+    {
+    return KEmailIFUidMailbox;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::Release()
+    {
+    delete this;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TMailboxId CEmailMailbox::MailboxId() const
+    {
+    return iMailboxId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailAddress* CEmailMailbox::AddressL() const
+    {
+    if ( !iAddress )
+        {
+        iAddress = CEmailAddress::NewL(
+            MEmailAddress::ESender, EAPIOwns );
+        iAddress->SetDisplayNameL( iFsMailbox->GetName() );
+        iAddress->SetAddressL( iFsMailbox->OwnMailAddress().GetEmailAddress() );
+        }
+    return iAddress;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TPtrC CEmailMailbox::MailboxName() const
+    {
+    return iFsMailbox->GetName();
+    }
+
+// -----------------------------------------------------------------------------
+// Constructs and returns type mailbox id of internal data type TFSMailMsgId
+// -----------------------------------------------------------------------------
+TFSMailMsgId CEmailMailbox::FsMailboxId() const
+    {
+    return FsMsgId( iPluginData, iMailboxId );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TInt CEmailMailbox::GetFoldersL( RFolderArray& aFolders ) const
+    {
+    TFSMailMsgId rootId = TFSMailMsgId();
+    RPointerArray<CFSMailFolder> folders;
+    CleanupResetAndDestroyPushL( folders );
+    iPlugin->ListFoldersL( FsMailboxId(), rootId, folders );
+    TInt res( folders.Count() );
+    for ( TInt i = 0; i < res; i++ )
+        {
+        const CFSMailFolder* fsfolder = folders[i];
+        const TEntryId id = fsfolder->GetFolderId().Id();
+        const TFolderId folderId( id, iMailboxId );
+        CEmailFolder* folder = CEmailFolder::NewLC( iPluginData, folderId, folders[i] );
+        aFolders.AppendL( folder );
+        CleanupStack::Pop( folder );
+        }
+    CleanupStack::Pop( &folders );
+    folders.Close(); // close but don't delete folders because they are
+                     // owned by CEmailFolder
+    return res;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailFolder* CEmailMailbox::FolderL( const TFolderId& aFolderId ) const
+    {
+    CFSMailFolder* fsFolder = iPlugin->GetFolderByUidL(
+            FsMsgId( iPluginData, iMailboxId ),
+            FsMsgId( iPluginData, aFolderId ) );
+    CleanupStack::PushL( fsFolder );
+
+    CEmailFolder* folder = CEmailFolder::NewL( iPluginData,
+                aFolderId, fsFolder );
+    CleanupStack::Pop( fsFolder );
+
+    return folder;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailFolder* CEmailMailbox::FolderByTypeL(
+    const TFolderType aFolderType ) const
+    {
+    TFSMailMsgId fsFolderId;
+
+    switch ( aFolderType )
+        {
+        case EInbox:
+            fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSInbox );
+            break;
+        case EOutbox:
+            fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSOutbox );
+            break;
+        case EDrafts:
+            fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSDraftsFolder );
+            break;
+        case EDeleted:
+            fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSDeleted );
+            break;
+        case ESent:
+            fsFolderId = iPlugin->GetStandardFolderIdL( FsMailboxId(), EFSSentFolder );
+            break;
+        case EOther:
+        default:
+            User::Leave( KErrNotFound );
+            break;
+        }
+
+    const TFolderId folderId( fsFolderId.Id(), iMailboxId );
+
+    CFSMailFolder* fsFolder = iPlugin->GetFolderByUidL(
+            FsMsgId( iPluginData, iMailboxId ),
+            fsFolderId );
+    CleanupStack::PushL( fsFolder );
+
+    CEmailFolder* folder = CEmailFolder::NewL( iPluginData,
+            folderId,
+            fsFolder );
+
+    CleanupStack::Pop( fsFolder );
+
+    return folder;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailMessage* CEmailMailbox::MessageL( const TMessageId& aMessageId )
+    {
+    CFSMailMessage *fsMessage = iPlugin->GetMessageByUidL(
+            FsMsgId( iPluginData, aMessageId.iFolderId.iMailboxId ),
+            FsMsgId( iPluginData, aMessageId.iFolderId ),
+            FsMsgId( iPluginData, aMessageId ),
+            EFSMsgDataEnvelope );
+
+    CleanupStack::PushL( fsMessage );
+    CEmailMessage* message = CEmailMessage::NewL( iPluginData, fsMessage, EClientOwns );
+    CleanupStack::Pop( fsMessage );
+
+    return message;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailMessage* CEmailMailbox::CreateDraftMessageL() const
+    {
+    CFSMailMessage* fsMessage = iFsMailbox->CreateMessageToSend();
+    User::LeaveIfNull( fsMessage );
+    CleanupStack::PushL( fsMessage );
+    MEmailMessage* message = CEmailMessage::NewL( iPluginData, fsMessage, EClientOwns );
+    CleanupStack::Pop( fsMessage );
+
+    return message;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailMessage* CEmailMailbox::CreateReplyMessageL( 
+        const TMessageId& aMessageId, const TBool aReplyToAll ) const
+    {
+    CFSMailMessage* fsMessage = iFsMailbox->CreateReplyMessage( 
+        FsMsgId( iPluginData, aMessageId ), aReplyToAll );
+    User::LeaveIfNull( fsMessage );
+    CleanupStack::PushL( fsMessage );
+    MEmailMessage* message = CEmailMessage::NewL( iPluginData, fsMessage, EClientOwns );
+    CleanupStack::Pop( fsMessage );
+
+    return message;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailMessage* CEmailMailbox::CreateForwardMessageL( const TMessageId& aMessageId ) const
+    {
+    CFSMailMessage* fsMessage = iFsMailbox->CreateForwardMessage(
+        FsMsgId( iPluginData, aMessageId ), KNewLine() );
+    User::LeaveIfNull( fsMessage );
+    CleanupStack::PushL( fsMessage );
+    MEmailMessage* message = CEmailMessage::NewL( iPluginData, fsMessage, EClientOwns );
+    CleanupStack::Pop( fsMessage );
+
+    return message;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::SynchroniseL( MMailboxSyncObserver& aObserver )
+    {
+    iSyncObserver->SetObserverL( &aObserver );
+    iRequestId = iFsMailbox->RefreshNowL( *iSyncObserver );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::CancelSynchronise()
+    {
+    iFsMailbox->CancelSearch();
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::RegisterObserverL( MMailboxContentObserver& aObserver )
+    {
+    iEventMapper->AddObserverL( aObserver );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::UnregisterObserver( MMailboxContentObserver& aObserver )
+    {
+    iEventMapper->RemoveObserver( aObserver );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+MEmailMessageSearchAsync* CEmailMailbox::MessageSearchL()
+    {
+    MEmailMessageSearchAsync* searchAPI = 
+        CEmailMessageSearchAsync::NewL( iPluginData, iMailboxId );
+    return searchAPI;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::ShowInboxL()
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::EditNewMessageL()
+    {
+    bool syncronous;
+
+    XQServiceRequest request( emailInterfaceNameSend,
+                             emailOperationSendMail,
+                             syncronous );
+
+    QVariant returnValue;
+    if ( !request.send( returnValue ) )
+        User::Leave( KErrGeneral );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailMailbox::TObserverEventMapper::TObserverEventMapper(
+    CFSMailPlugin* aPlugin,
+    TUid aPluginUid, const TMailboxId& aMailboxId )
+     : iPlugin( aPlugin ),
+       iFsMailboxId( aPluginUid.iUid, aMailboxId.iId )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailMailbox::TObserverEventMapper::~TObserverEventMapper()
+    {
+    iClientObservers.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// Adds mailbox observer and subscribes to plugin mailbox events if there
+// were no previous observers.
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::AddObserverL( 
+        MMailboxContentObserver& aObserver )
+    {
+    TIdentityRelation<MMailboxContentObserver> relation( 
+        &CEmailMailbox::TObserverEventMapper::Equals );
+    if ( iClientObservers.Find( &aObserver, relation ) == KErrNotFound )
+        {
+        const TInt count( iClientObservers.Count() );
+        if  ( !count )
+            {
+            iPlugin->SubscribeMailboxEventsL( iFsMailboxId, *this );
+            }
+        iClientObservers.AppendL( &aObserver );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Removes an observer and removes event subscription if the observer was
+// last in observer array.
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::RemoveObserver( 
+        MMailboxContentObserver& aObserver )
+    {
+    TIdentityRelation<MMailboxContentObserver> relation( 
+        &CEmailMailbox::TObserverEventMapper::Equals );
+    const TInt index( iClientObservers.Find( &aObserver, relation ) );
+    if ( index != KErrNotFound )
+        {
+        iClientObservers.Remove( index );
+        const TInt count( iClientObservers.Count() );
+        if  ( !count )
+            {
+            iPlugin->UnsubscribeMailboxEvents( iFsMailboxId, *this );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Maps protocol a plugin event to client event
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::EventL(
+    TFSMailEvent aEvent,
+    TFSMailMsgId aMailbox,
+    TAny* aParam1,
+    TAny* aParam2,
+    TAny* aParam3 )
+    {
+    const TEventMapFunc KMailboxEventHandlers[] = {
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::IgnoreEventL,
+    &CEmailMailbox::TObserverEventMapper::NewMessageL,
+    &CEmailMailbox::TObserverEventMapper::MessageChangedL,
+    &CEmailMailbox::TObserverEventMapper::MessageDeletedL,
+    &CEmailMailbox::TObserverEventMapper::MessageMoved,
+    &CEmailMailbox::TObserverEventMapper::MessageCopiedL,
+    &CEmailMailbox::TObserverEventMapper::NewFolderL,
+    &CEmailMailbox::TObserverEventMapper::FolderChangeL,
+    &CEmailMailbox::TObserverEventMapper::FoldersDeletedL,
+    &CEmailMailbox::TObserverEventMapper::FoldersMovedL,
+    &CEmailMailbox::TObserverEventMapper::ExceptionL
+    };
+
+    TMailboxId id( aMailbox.Id() );
+    // boundary check
+    const TInt index( aEvent );
+    if ( index < sizeof( KMailboxEventHandlers ) / sizeof( KMailboxEventHandlers[ index ] ) )
+        {
+        // call event handler function
+        TEventMapFunc method = KMailboxEventHandlers[ index ];
+        (this->*method)(id, aParam1,aParam2,aParam3 );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::ConvertParamsL( 
+        TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, 
+        REmailMessageIdArray& aMessageIds, TFolderId& aFolderId )
+    {
+    RArray<TFSMailMsgId>* newEntries( static_cast< RArray<TFSMailMsgId>* >( aParam1 ) );
+    CleanupClosePushL( *newEntries );
+    TFSMailMsgId* parentFolder = static_cast<TFSMailMsgId*>( aParam2 );
+    aFolderId = TFolderId( parentFolder->Id(), aMailbox );
+
+    for ( TInt j = 0; j < newEntries->Count(); j++ ) 
+        {
+        TFSMailMsgId fsId(( *newEntries )[j] );
+        TMessageId messageId( fsId.Id(), aFolderId.iId, aMailbox );
+        aMessageIds.Append( messageId );
+        }
+
+    CleanupStack::PopAndDestroy( newEntries );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::IgnoreEventL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::NewMessageL(
+    TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ )
+    {
+    REmailMessageIdArray messageIds;
+    TFolderId folderId;
+    ConvertParamsL( aMailbox, aParam1, aParam2, messageIds, folderId );
+    CleanupClosePushL( messageIds );
+
+    for ( TInt i = 0; i < iClientObservers.Count(); i++ )
+        {
+        MMailboxContentObserver* observer = iClientObservers[i];
+        if (observer)
+            observer->NewMessageEventL( aMailbox, messageIds, folderId );
+        }
+    
+    CleanupStack::PopAndDestroy( &messageIds );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::MessageChangedL(
+    TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ )
+    {
+    REmailMessageIdArray messageIds;
+    TFolderId folderId;
+    ConvertParamsL( aMailbox, aParam1, aParam2, messageIds, folderId );
+    CleanupClosePushL( messageIds );
+
+    for ( TInt i = 0; i < iClientObservers.Count(); i++ )
+        {
+        MMailboxContentObserver* observer = iClientObservers[i];
+        if (observer)
+            observer->MessageChangedEventL( aMailbox, messageIds, folderId );
+        }
+    CleanupStack::PopAndDestroy( &messageIds );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::MessageDeletedL(
+    TMailboxId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ )
+    {
+    REmailMessageIdArray messageIds;    
+    TFolderId folderId;
+    ConvertParamsL( aMailbox, aParam1, aParam2, messageIds, folderId );
+    CleanupClosePushL( messageIds );
+
+    for ( TInt i = 0; i < iClientObservers.Count(); i++ )
+        {
+        MMailboxContentObserver* observer = iClientObservers[i];
+        if (observer)
+            observer->MessageDeletedEventL( aMailbox, messageIds, folderId );
+        }
+    
+    CleanupStack::PopAndDestroy( &messageIds );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::MessageMoved(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::MessageCopiedL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::NewFolderL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::FolderChangeL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::FoldersDeletedL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::FoldersMovedL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::TObserverEventMapper::ExceptionL(
+    TMailboxId /*aMailbox*/, TAny* /*aParam1*/, TAny* /*aParam2*/, TAny* /*aParam3*/ )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TBool CEmailMailbox::TObserverEventMapper::Equals( 
+        const MMailboxContentObserver& a1, const MMailboxContentObserver& a2 )
+    {
+    return ( &a1 == &a2 );
+    }
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailMailbox::CEmailRequestObserver::CEmailRequestObserver() : iObserver( NULL )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::CEmailRequestObserver::RequestResponseL( 
+        TFSProgress aEvent, TInt /* aRequestId */ )
+    {
+    if ( iObserver && aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
+        {
+        iObserver->MailboxSynchronisedL(aEvent.iError);
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMailbox::CEmailRequestObserver::SetObserverL( MMailboxSyncObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailmailboxcache.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailMailboxCache.
+*
+*/
+
+#include "emailmailboxcache.h"
+#include "emailapiutils.h"
+
+static const TInt KCacheGranularity = 2;
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMailboxCache* CEmailMailboxCache::NewL()
+    {
+    CEmailMailboxCache* cache = new ( ELeave ) CEmailMailboxCache();
+    return cache;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMailboxCache::~CEmailMailboxCache()
+    {
+    iEntries.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// Start of cache transaction with clenanup support
+// ---------------------------------------------------------------------------
+void CEmailMailboxCache::StartCachingPushL()
+    {
+    TCleanupItem item( &CEmailMailboxCache::CleanupOp, this );
+    CleanupStack::PushL( item );
+    iState = ECaching;
+    iEntries.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+//  End of cache transaction
+// ---------------------------------------------------------------------------
+void CEmailMailboxCache::EndCachingPop()
+    {
+    iState = EComplete;
+    CleanupStack::Pop();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TBool CEmailMailboxCache::IsCached() const
+    {
+    return iState == EComplete;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMailboxCache::AddMailboxL( 
+    CPluginData& aPluginData, 
+    const TMailboxId& aMailboxId )
+    {
+    if ( iState != ECaching )
+        {
+        User::Leave( KErrNotReady );
+        }
+    if ( FindById( aMailboxId ) == KErrNotFound )
+        {
+        TCacheEntry entry( &aPluginData, aMailboxId );
+        iEntries.AppendL( entry );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CPluginData* CEmailMailboxCache::PluginDataL( const TMailboxId& aMailboxId ) const
+    {
+    CPluginData* pdata = NULL;
+    const TInt index( FindById( aMailboxId ) );
+    if ( index != KErrNotFound )
+        {
+        const TCacheEntry& entry = iEntries[ index ];
+        pdata = entry.iPluginData;
+        }
+    return pdata;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CPluginData* CEmailMailboxCache::PluginDataL( const TUid& aPluginId ) const
+    {
+    CPluginData* pdata = NULL;
+    const TInt index( FindByPluginIdL( aPluginId ) );
+    if ( index != KErrNotFound )
+        {
+        const TCacheEntry& entry = iEntries[ index ];
+        pdata = entry.iPluginData;
+        }
+    return pdata;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+void CEmailMailboxCache::GetIdsL( REmailMailboxIdArray& aIdArray ) const
+    {
+    if ( iState != EComplete )
+        {
+        // cache not up to date
+        User::Leave( KErrNotReady );
+        }
+    for ( TInt i=0; i < iEntries.Count(); i++ )
+        {
+        TMailboxId id = iEntries[i].iMailboxId;
+        aIdArray.AppendL( id );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TInt CEmailMailboxCache::FindById( const TMailboxId& aMailboxId ) const
+    {
+    TIdentityRelation<TCacheEntry> rel( CEmailMailboxCache::Equals );
+
+    // don't care about plugin data because this is seach key only and
+    // mailbox id is used for search
+    TCacheEntry entry( NULL, aMailboxId );
+    return iEntries.Find( entry, rel );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TInt CEmailMailboxCache::FindByPluginIdL( const TUid& aPluginId ) const
+    {
+    TIdentityRelation<TCacheEntry> rel( CEmailMailboxCache::PluginEquals );
+    CPluginData* key = new ( ELeave ) CPluginData( aPluginId );
+    TCacheEntry entry( key, TMailboxId() );
+    TInt index = iEntries.Find( entry, rel ); 
+    delete key;
+    return index;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TBool CEmailMailboxCache::Equals( const TCacheEntry& a1, const TCacheEntry& a2 )
+    {
+    return ( a1.iMailboxId == a2.iMailboxId );
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+TBool CEmailMailboxCache::PluginEquals( const TCacheEntry& a1, const TCacheEntry& a2 )
+    {
+    return ( a1.iPluginData->Uid() == a2.iPluginData->Uid() );
+    }
+
+// ---------------------------------------------------------------------------
+// Cleanup 
+// ---------------------------------------------------------------------------
+void CEmailMailboxCache::CleanupOp( TAny* aAny )
+    {
+    CEmailMailboxCache* cache = reinterpret_cast<CEmailMailboxCache*>( aAny );
+    cache->iEntries.Reset();
+    cache->iState = EEmpty;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+CEmailMailboxCache::CEmailMailboxCache() : 
+    iState( EEmpty ), 
+    iEntries( KCacheGranularity )
+    {
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailmessage.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,912 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailMessage.
+*
+*/
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <viewclipartner.h>
+#include <vwsdefpartner.h>
+#else
+#include <viewcli.h>
+#include <vwsdef.h>
+#endif // SYMBIAN_ENABLE_SPLIT_HEADERS
+
+#include "emailmessage.h"
+#include "emailaddress.h"
+#include "emailapiutils.h"
+#include "emailclientapi.hrh"
+#include "emailapiutils.h"
+#include "emailinterfacefactoryimpl.h"
+#include "emailcontent.h"
+#include "emailtextcontent.h"
+#include "emailmultipart.h"
+#include "emailattachment.h"
+#include "cfsmailplugin.h"
+#include "cfsmailclient.h"
+
+#include <XQServiceRequest.h>
+#include "email_services_api.h"
+
+const TInt KSendMessageRequestId = 100;
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMessage* CEmailMessage::NewL( CPluginData& aPluginData,
+                                    CFSMailMessage* aFsMessage,
+                                    const TDataOwner aOwner )
+    {
+    CEmailMessage* message = new ( ELeave ) CEmailMessage( aPluginData, aFsMessage, aOwner );
+    CleanupStack::PushL( message );
+    message->ConstructL();
+    CleanupStack::Pop( message );
+    return message;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMessage::CEmailMessage(
+        CPluginData& aPluginData,
+        CFSMailMessage *aFsMessage,
+        const TDataOwner aOwner)
+        : iPluginData( aPluginData ), iPluginMessage( aFsMessage ), iOwner( aOwner )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::ConstructL()
+    {
+    User::LeaveIfNull( iPluginMessage );
+    iPlugin = iPluginData.ClaimInstanceL();
+    if ( iPluginMessage )
+        {
+        iMessageId = TMessageId( 
+            iPluginMessage->GetMessageId().Id(),
+            iPluginMessage->GetFolderId().Id(), 
+            iPluginMessage->GetMailBoxId().Id() );
+
+        // Copy the message flags
+        InitializeFlagValues();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMessage::~CEmailMessage()
+    {
+    delete iPluginMessage;
+    delete iSender;
+    delete iReplyTo;
+    delete iTextContent;
+    delete iContent;
+    iPluginData.ReleaseInstance();
+    iAttachments.ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailMessage::InterfaceId() const
+    {
+    return KEmailIFUidMessage;
+    }
+    
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::Release()
+    {
+    if ( iOwner == EClientOwns )
+        {
+        delete this;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+const TMessageId& CEmailMessage::MessageId() const
+    {
+    return iMessageId;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAddress* CEmailMessage::SenderAddressL() const
+    {
+    User::LeaveIfNull( iPluginMessage );
+
+    CFSMailAddress* fsAddress = iPluginMessage->GetSender();
+    if ( fsAddress )
+        {
+        if ( !iSender )
+            {
+            iSender = CEmailAddress::NewL( MEmailAddress::ESender, EAPIOwns );
+            }
+        iSender->SetAddressL(fsAddress->GetEmailAddress());
+        iSender->SetDisplayNameL(fsAddress->GetDisplayName());
+        }
+    else
+        {
+        // Sender address not defined. Delete client object as well
+        delete iSender;
+        iSender = NULL;
+        }
+    return iSender;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAddress* CEmailMessage::ReplyToAddressL() const
+    {
+    User::LeaveIfNull( iPluginMessage );
+
+    const CFSMailAddress& fsAddress = iPluginMessage->GetReplyToAddress();
+    if ( &fsAddress )
+        {
+        if ( !iReplyTo )
+            {
+            iReplyTo = CEmailAddress::NewL( MEmailAddress::EReplyTo, EAPIOwns );
+            }
+        iReplyTo->SetAddressL( fsAddress.GetEmailAddress() );
+        iReplyTo->SetDisplayNameL( fsAddress.GetDisplayName() );
+        }
+    else
+        {
+        delete iReplyTo;
+        iReplyTo = NULL;
+        }
+    return iReplyTo;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SetReplyToAddressL( const MEmailAddress& aSender )
+    {
+    User::LeaveIfNull( iPluginMessage );
+    
+    CFSMailAddress *fsAddress = CFSMailAddress::NewLC();
+    if ( !iReplyTo )
+        {
+        iReplyTo = CEmailAddress::NewL( MEmailAddress::EReplyTo, EAPIOwns );
+        }
+    fsAddress->SetDisplayName( aSender.DisplayName() );
+    fsAddress->SetEmailAddress( aSender.Address() );
+    iPluginMessage->SetReplyToAddress( fsAddress );
+    iReplyTo->SetAddressL( fsAddress->GetEmailAddress() );
+    iReplyTo->SetDisplayNameL( fsAddress->GetDisplayName() );
+    CleanupStack::Pop();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailMessage::GetRecipientsL( const MEmailAddress::TRole aRole,
+        REmailAddressArray& aRecipients ) const
+    {
+    if( aRole == MEmailAddress::EReplyTo ||
+        aRole == MEmailAddress::ESender )
+        {
+        User::Leave( KErrArgument );
+        }
+    else 
+        {
+        User::LeaveIfNull( iPluginMessage );
+        
+        if( aRole == MEmailAddress::ETo || 
+            aRole == MEmailAddress::EUndefined )
+            {
+            const RPointerArray<CFSMailAddress>& toRecipients =
+                iPluginMessage->GetToRecipients();
+            ConvertAddressArrayL( 
+                    MEmailAddress::ETo, 
+                    toRecipients, aRecipients );
+            }
+        if( aRole == MEmailAddress::ECc || 
+            aRole == MEmailAddress::EUndefined )
+            {
+            const RPointerArray<CFSMailAddress>& ccRecipients =
+                iPluginMessage->GetCCRecipients();
+            ConvertAddressArrayL( 
+                    MEmailAddress::ECc, 
+                    ccRecipients, aRecipients );
+            }
+        if( aRole == MEmailAddress::EBcc || 
+            aRole == MEmailAddress::EUndefined )
+            {
+            const RPointerArray<CFSMailAddress>& bccRecipients =
+                iPluginMessage->GetBCCRecipients();
+            ConvertAddressArrayL( 
+                    MEmailAddress::EBcc, 
+                    bccRecipients, aRecipients );
+            }
+        }
+    return aRecipients.Count();
+    }
+    
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SetRecipientsL( const MEmailAddress::TRole aRole,
+        REmailAddressArray& aRecipients )
+    {
+    TInt count( aRecipients.Count() );
+
+    for( TInt i=0;i<count;i++ )
+        {
+        const MEmailAddress* address = aRecipients[i];
+        CFSMailAddress* fsAddress = CFSMailAddress::NewLC();
+        fsAddress->SetEmailAddress( address->Address() );
+        fsAddress->SetDisplayName( address->DisplayName() );
+        
+        User::LeaveIfNull( iPluginMessage );
+        
+        if( aRole == MEmailAddress::ETo )
+            {
+            iPluginMessage->AppendToRecipient( fsAddress );
+            }
+        else if( aRole == MEmailAddress::ECc )
+            {
+            iPluginMessage->AppendCCRecipient( fsAddress );
+            }
+        else if( aRole == MEmailAddress::EBcc )
+            {
+            iPluginMessage->AppendBCCRecipient( fsAddress );
+            }
+        else
+            {
+            User::Leave( KErrArgument );
+            }
+        CleanupStack::Pop( fsAddress );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::RemoveRecipientL( const MEmailAddress& /*aRecipient*/ )
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMessage::Subject() const
+    {
+    if ( !iPluginMessage )
+        return KNullDesC();
+    return iPluginMessage->GetSubject();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void  CEmailMessage::SetSubjectL( const TPtrC& aSubject )
+    {
+    User::LeaveIfNull( iPluginMessage );
+    iPluginMessage->SetSubject( aSubject );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TTime CEmailMessage::Date() const
+    {
+    TTime time;
+
+    if ( iPluginMessage ) {
+        time = iPluginMessage->GetDate();
+    }
+
+    return time;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailMessage::Flags() const
+    {
+    return iFlags;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SetFlag( const TUint aFlag )
+    {
+    iFlags |= aFlag;
+    TUint flag = MapFlags( aFlag );
+    if ( iPluginMessage )
+        iPluginMessage->SetFlag( flag );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::ResetFlag( const TUint aFlag )
+    {
+    iFlags &= ~aFlag;
+    TUint flag = MapFlags( aFlag );
+    if ( iPluginMessage )
+        iPluginMessage->ResetFlag( flag );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::InitializeFlagValues()
+    {
+    if ( !iPluginMessage )
+        return;
+    // 1st reset member value, then start copying different flags
+    iFlags = 0;
+    
+    // EFlag_Read
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Read ) )
+        {
+        iFlags |= EFlag_Read;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Read;
+        }
+    //    EFlag_Read_Locally
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Read_Locally ) )
+        {
+        iFlags |= EFlag_Read_Locally;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Read_Locally;
+        }    
+    // EFlag_Low
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Low ) )
+        {
+        iFlags |= EFlag_Low;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Low;
+        }
+    // EFlag_Important
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Important ) )
+        {
+        iFlags |= EFlag_Important;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Important;
+        }
+    // EFlag_FollowUpComplete
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
+        {
+        iFlags |= EFlag_FollowUpComplete;
+        }
+    else
+        {
+        iFlags &= ~EFlag_FollowUpComplete;
+        }
+    // EFlag_FollowUp
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_FollowUp ) )
+        {
+        iFlags |= EFlag_FollowUp;
+        }
+    else
+        {
+        iFlags &= ~EFlag_FollowUp;
+        }
+    // EFlag_Attachments
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Attachments ) )
+        {
+        iFlags |= EFlag_Attachments;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Attachments;
+        }
+    // EFlag_Multiple
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Multiple ) )
+        {
+        iFlags |= EFlag_Multiple;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Multiple;
+        }
+    // EFlag_CalendarMsg
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_CalendarMsg ) )
+        {
+        iFlags |= EFlag_CalendarMsg;
+        }
+    else
+        {
+        iFlags &= ~EFlag_CalendarMsg;
+        }
+    // EFlag_Answered
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Answered ) )
+        {
+        iFlags |= EFlag_Answered;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Answered;
+        }
+    // EFlag_Forwarded
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_Forwarded ) )
+        {
+        iFlags |= EFlag_Forwarded;
+        }
+    else
+        {
+        iFlags &= ~EFlag_Forwarded;
+        }
+    // EFlag_OnlyToMe
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_OnlyToMe ) )
+        {
+        iFlags |= EFlag_OnlyToMe;
+        }
+    else
+        {
+        iFlags &= ~EFlag_OnlyToMe;
+        }
+    // EFlag_RemoteDeleted
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_RemoteDeleted ) )
+        {
+        iFlags |= EFlag_RemoteDeleted;
+        }
+    else
+        {
+        iFlags &= ~EFlag_RemoteDeleted;
+        }
+    // EFlag_HasMsgSender 
+    if ( iPluginMessage->IsFlagSet( EFSMsgFlag_HasMsgSender ) )
+        {
+        iFlags |= EFlag_HasMsgSender;
+        }
+    else
+        {
+        iFlags &= ~EFlag_HasMsgSender;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMessageContent* CEmailMessage::ContentL() const
+    {
+    if ( iTextContent )
+        {
+        return iTextContent;
+        }
+    if ( iContent )
+        {
+        return iContent;
+        }
+
+    User::LeaveIfNull( iPluginMessage );
+    
+    RPointerArray<CFSMailMessagePart> parts;
+    CleanupResetAndDestroyPushL( parts );
+    iPluginMessage->ChildPartsL( parts );
+    TInt count( parts.Count() );
+    if( count == 0 )
+        {
+        /* No content, return NULL */
+        CleanupStack::PopAndDestroy( &parts ); // in case heap allocated but not used
+        return NULL;
+        }
+    CFSMailMessagePart* part = parts[0];
+    TContentType contentType( part->GetContentType() );
+    TMessageContentId msgContentId = TMessageContentId(
+                        part->GetPartId().Id(),
+                        iMessageId.iId,
+                        iMessageId.iFolderId.iId,
+                        iMessageId.iFolderId.iMailboxId );
+
+    if ( contentType.Equals( KFSMailContentTypeTextPlain ) ||
+        contentType.Equals( KFSMailContentTypeTextHtml ) )
+        {                                
+        iTextContent = CEmailTextContent::NewL(iPluginData, msgContentId, part, EAPIOwns );
+        parts[0] = NULL; // ownership of part transferred
+        }
+    else if ( contentType.Equals( KFSMailContentTypeMultipartMixed ) ||
+              contentType.Equals( KFSMailContentTypeMultipartAlternative ) ||
+              contentType.Equals( KFSMailContentTypeMultipartDigest ) ||
+              contentType.Equals( KFSMailContentTypeMultipartRelated ) ||
+              contentType.Equals( KFSMailContentTypeMultipartParallel ) )
+        {
+        iContent = CEmailMultipart::NewL(iPluginData, msgContentId, part, EAPIOwns);
+        parts[0] = NULL; // ownership of part transferred
+        }
+
+    CleanupStack::PopAndDestroy( &parts ); // parts
+
+    if (iTextContent)
+        {
+        return iTextContent;
+        }
+    return iContent;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SetContentL( const MEmailMessageContent*  aContent )
+    {
+    User::LeaveIfNull( aContent );
+    MEmailTextContent* textContent = aContent->AsTextContentOrNull();
+    if ( textContent )
+        {
+        if ( iTextContent )
+            {
+            delete iTextContent; // Destroy old content
+            }
+        iTextContent = dynamic_cast<CEmailTextContent*>( textContent );
+        if ( iTextContent )
+            {
+            iTextContent->SetOwner( EAPIOwns );
+            }
+        return;
+        }
+    MEmailMultipart* mPart = aContent->AsMultipartOrNull();
+    if ( mPart )
+        {
+        if ( iContent )
+            {
+            delete iContent;
+            }
+        iContent = dynamic_cast<CEmailMultipart*>( mPart );
+        if ( iContent )
+            {
+            iContent->SetOwner( EAPIOwns );
+            }
+        }    
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SetPlainTextBodyL( const TDesC& aPlainText )
+    {
+    if ( iTextContent )
+        {
+        iTextContent->SetTextL( MEmailTextContent::EPlainText, aPlainText );
+        return;
+        }
+
+    User::LeaveIfNull( iPluginMessage );
+
+    CFSMailMessagePart* msgTextPart = iPluginMessage->PlainTextBodyPartL();
+    
+    if( !msgTextPart )
+        {
+        msgTextPart = iPluginMessage->NewChildPartL( TFSMailMsgId(), KFSMailContentTypeTextPlain );
+        }
+    CleanupStack::PushL( msgTextPart );
+
+    TMessageContentId msgContentId = MessageContentId( msgTextPart->GetPartId().Id() );
+
+    msgTextPart->SetContentType( KFSMailContentTypeTextPlain );
+    iTextContent = CEmailTextContent::NewL( iPluginData, msgContentId, msgTextPart, EAPIOwns );
+    if (iTextContent)
+        {
+        iTextContent->SetTextL( MEmailTextContent::EPlainText, aPlainText );
+        }
+    CleanupStack::Pop( msgTextPart );
+
+    return;
+
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAttachment* CEmailMessage::AddAttachmentL( const TDesC& aFullPath )
+    {
+    User::LeaveIfNull( iPluginMessage );
+
+    CFSMailMessagePart* part = iPluginMessage->AddNewAttachmentL( aFullPath, TFSMailMsgId() );
+    CleanupStack::PushL( part );    
+    CEmailAttachment* att = CEmailAttachment::NewLC( iPluginData, iMsgContentId, part, EAPIOwns );
+    iAttachments.AppendL( att );
+    CleanupStack::Pop( 2, part );
+
+    return att;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAttachment* CEmailMessage::AddAttachmentL( RFile& aFile )
+    {
+    User::LeaveIfNull( iPluginMessage );
+    TBufC8 <1> mime;
+    CFSMailMessagePart* part = iPluginMessage->AddNewAttachmentL( aFile, mime );
+    CleanupStack::PushL( part );
+    CEmailAttachment* att = CEmailAttachment::NewLC( iPluginData, iMsgContentId, part, EAPIOwns );
+    iAttachments.AppendL( att );
+
+    CleanupStack::Pop( 2, part );
+
+    return att;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailMessage::GetAttachmentsL( REmailAttachmentArray& aAttachments )
+    {
+    User::LeaveIfNull( iPluginMessage );
+
+    RPointerArray<CFSMailMessagePart> attachments;
+    CleanupResetAndDestroyPushL( attachments );
+    iPluginMessage->AttachmentListL( attachments );
+    const TInt count( attachments.Count() );
+    for (TInt i = 0; i < count; i++)
+        {
+        TMessageContentId msgContentId = MessageContentId( attachments[i]->GetPartId().Id() );
+
+        CEmailAttachment* att = CEmailAttachment::NewL( 
+            iPluginData, msgContentId, attachments[i], EClientOwns );
+
+        aAttachments.AppendL( att );
+        }
+    CleanupStack::Pop( &attachments );
+    return count;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::RemoveAttachmentL( const MEmailAttachment& /*aAttachment*/ )
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+const TFolderId& CEmailMessage::ParentFolderId() const
+    {
+    return iMessageId.iFolderId;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SaveChangesL()
+    {
+    User::LeaveIfNull( iPluginMessage );
+    
+    TFSMailMsgId mailboxId( 
+            FsMsgId( iPluginData, iMessageId.iFolderId.iMailboxId ) );
+    
+    iPlugin->StoreMessageL( mailboxId, *iPluginMessage );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::SendL()
+    {
+    User::LeaveIfNull( iPluginMessage );
+    
+    if ( iEventLoop.isRunning() )
+        User::Leave( KErrInUse );
+    
+    SaveChangesL();
+    iError = KErrNone;
+    iPlugin->SendMessageL( *iPluginMessage, *this, KSendMessageRequestId );
+    iEventLoop.exec();
+
+    User::LeaveIfError( iError );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::RequestResponseL( TFSProgress aEvent, TInt aRequestId )
+    {
+    iError = aEvent.iError;
+
+    if ( aRequestId == KSendMessageRequestId &&
+            aEvent.iProgressStatus == TFSProgress::EFSStatus_RequestComplete )
+        iEventLoop.quit();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessage::ConvertAddressArrayL(
+        const MEmailAddress::TRole aRole,
+        const RPointerArray<CFSMailAddress>& aSrc,
+        REmailAddressArray& aDst ) const
+    {
+    for ( TInt i=0; i<aSrc.Count(); i++ )
+        {
+        CEmailAddress* recipient = CreateAddressLC( aRole, *aSrc[i] );
+        aDst.AppendL( recipient );
+        CleanupStack::Pop( recipient );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+CEmailAddress* CEmailMessage::CreateAddressLC(
+        const MEmailAddress::TRole aRole, 
+        CFSMailAddress& aFsAddress ) const
+    {
+    CEmailAddress* address = CEmailAddress::NewLC( aRole, EClientOwns );
+    TDesC& temp1 = aFsAddress.GetEmailAddress();
+    if ( &temp1 )
+        {
+        address->SetAddressL( temp1 );
+        }
+    TDesC& temp2 = aFsAddress.GetDisplayName();
+    if ( &temp2 )
+        {
+        address->SetDisplayNameL( temp2 );
+        }   
+    return address;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TUint CEmailMessage::MapFlags( const TUint& aFlag )
+    {
+    TUint flag = 0;
+    switch( aFlag )
+        {
+        case EFlag_Read:
+            flag = EFSMsgFlag_Read;
+            break;
+        case EFlag_Read_Locally:
+            flag = EFSMsgFlag_Read_Locally;
+            break;
+        case EFlag_Low:
+            flag = EFSMsgFlag_Low;
+            break;
+        case EFlag_Important:
+            flag = EFSMsgFlag_Important;
+            break;
+        case EFlag_FollowUpComplete:
+            flag = EFSMsgFlag_FollowUpComplete;
+            break;
+        case EFlag_FollowUp:
+            flag = EFSMsgFlag_FollowUp;
+            break;
+        case EFlag_Attachments:
+            flag = EFSMsgFlag_Attachments;
+            break;
+        case EFlag_Multiple:
+            flag = EFSMsgFlag_Multiple;
+            break;
+        case EFlag_CalendarMsg:
+            flag = EFSMsgFlag_CalendarMsg;
+            break;
+        case EFlag_Answered:
+            flag = EFSMsgFlag_Answered;
+            break;
+        case EFlag_Forwarded:
+            flag = EFSMsgFlag_Forwarded;
+            break;
+        case EFlag_OnlyToMe:
+            flag = EFSMsgFlag_OnlyToMe;
+            break;
+        case EFlag_RemoteDeleted:
+            flag = EFSMsgFlag_RemoteDeleted;
+            break;
+        case EFlag_HasMsgSender:
+            flag = EFSMsgFlag_HasMsgSender;
+            break;
+        default:
+            break;
+        }
+    return flag;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMessage::ShowMessageViewerL()
+    {   
+    bool syncronous;
+
+    XQServiceRequest request(
+       emailInterfaceNameMessage,
+       emailOperationViewMessage,
+       syncronous );
+
+    TFSMailMsgId mailboxId = FsMsgId( iPluginData, iMessageId.iFolderId.iMailboxId );
+    TFSMailMsgId folderId = FsMsgId( iPluginData, iMessageId.iFolderId );
+    TFSMailMsgId messageId = FsMsgId( iPluginData, iMessageId );
+
+    QList<QVariant> list;
+    list.append( mailboxId.Id() );
+    list.append( folderId.Id() );
+    list.append( messageId.Id() );
+    request.setArguments( list );
+
+    QVariant returnValue;
+    if ( !request.send( returnValue ) )
+        User::Leave( KErrGeneral );
+    }
+
+// -----------------------------------------------------------------------------
+// Launches Email application and new reply message in editor. 
+// The method follows "fire and forget" pattern, returns immediately.
+// -----------------------------------------------------------------------------
+void CEmailMessage::ReplyToMessageL( const TBool /*aReplyToAll*/ )
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+void CEmailMessage::ForwardMessageL()
+    {
+    User::Leave( KErrNotSupported );
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TMessageContentId CEmailMessage::MessageContentId( TEntryId aContentId ) const
+    {
+    TMessageContentId msgContentId = TMessageContentId( 
+                    aContentId,
+                    iMessageId.iId,
+                    iMessageId.iFolderId.iId,
+                    iMessageId.iFolderId.iMailboxId );
+    return msgContentId;
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TContentType::TContentType( const TDesC& aContentType ) : iContentType( aContentType )
+    {
+    _LIT( KSeparator, ";" );
+    TInt end = aContentType.Find( KSeparator );
+    if ( end != KErrNotFound )
+        {
+        iContentType.Set( aContentType.Left( end ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+TBool TContentType::Equals( const TDesC& aContentType )
+    {
+    TBool ret = iContentType.CompareF( aContentType );
+    if ( ret == 0  )
+        return ETrue;
+    else
+        return EFalse;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailmessagesearch.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailMessageSearchAsync
+*
+*/
+
+#include <emailclientapi.hrh>
+#include "emailmessagesearch.h"
+#include "emailmessage.h"
+
+/**
+ * Global semaphore name. Semaphore blocks parallel service access.
+ */
+_LIT( KGlobalSemaphoreToPreventParallelCall, "12mymessaging.nokia.com34" );
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CEmailMessageSearchAsync::NewL
+// ---------------------------------------------------------------------------
+CEmailMessageSearchAsync* CEmailMessageSearchAsync::NewL(
+    CPluginData& aPluginData,
+    const TMailboxId& aMailboxId )
+    {
+    CEmailMessageSearchAsync* self = 
+        new ( ELeave ) CEmailMessageSearchAsync( aPluginData, aMailboxId );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+void CEmailMessageSearchAsync::ConstructL()
+    {
+    iPlugin = iPluginData.ClaimInstanceL();
+    // Open existing semaphore, or create a new one
+    if ( KErrNone != iGate.OpenGlobal( KGlobalSemaphoreToPreventParallelCall, EOwnerProcess ) )
+        {
+        User::LeaveIfError( 
+            iGate.CreateGlobal( KGlobalSemaphoreToPreventParallelCall, 1, EOwnerProcess ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMessageSearchAsync::CEmailMessageSearchAsync(    
+    CPluginData& aPluginData,
+    const TMailboxId& aMailboxId )
+    : iPluginData( aPluginData ), iMailboxId( aMailboxId.iId ),
+    iCriteria(), iObserver( NULL ), iRemote( EFalse )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMessageSearchAsync::~CEmailMessageSearchAsync()
+    {
+    iSearchStrings.Close();
+    iPluginData.ReleaseInstance();
+    iGate.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailMessageSearchAsync::InterfaceId() const
+    {
+    return KEmailIFUidSearch;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::Release()
+    {
+    if (KErrNone != iGate.Wait(1))
+        {
+        this->Cancel();
+        }
+    delete this;
+    }
+
+// -----------------------------------------------------------------------------
+// Sets sort order for search results.
+// Leaves KErrNotReady if search is ongoing.
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::SetSortCriteriaL( const TEmailSortCriteria& aCriteria )
+    {
+    IsSearchGoingOnL();
+
+    switch (aCriteria.iField)
+        {
+        case TEmailSortCriteria::EDontCare:
+            iCriteria.iField = EFSMailDontCare;
+            break;
+
+        case TEmailSortCriteria::EByDate:
+            iCriteria.iField = EFSMailSortByDate;
+            break;
+
+        case TEmailSortCriteria::EBySender:
+            iCriteria.iField = EFSMailSortBySender;
+            break;
+
+        case TEmailSortCriteria::EByRecipient:
+            iCriteria.iField = EFSMailSortByRecipient;
+            break;
+
+        case TEmailSortCriteria::EBySubject:
+            iCriteria.iField = EFSMailSortBySubject;
+            break;
+
+        case TEmailSortCriteria::EByPriority:
+            iCriteria.iField = EFSMailSortByPriority;
+            break;
+
+        case TEmailSortCriteria::EByFlagStatus:
+            iCriteria.iField = EFSMailSortByFlagStatus;
+            break;
+
+        case TEmailSortCriteria::EByUnread:
+            iCriteria.iField = EFSMailSortByUnread;
+            break;
+
+        case TEmailSortCriteria::EBySize:
+            iCriteria.iField = EFSMailSortBySize;
+            break;
+
+        case TEmailSortCriteria::EByAttachment:
+            iCriteria.iField = EFSMailSortByAttachment;
+            break;
+
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+
+        }
+    if (aCriteria.iAscending)
+        {
+        iCriteria.iOrder = EFSMailAscending;
+        }
+    else
+        {
+        iCriteria.iOrder = EFSMailDescending;
+        }
+    // Release gate
+    iGate.Signal();
+    }
+
+// -----------------------------------------------------------------------------
+// Adds a search key. Leaves KErrNotReady if search is ongoing.
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::AddSearchKeyL( const TDesC& aSearchKey ) 
+    {
+    IsSearchGoingOnL();
+
+    iSearchStrings.AppendL(&aSearchKey);
+    // Release gate
+    iGate.Signal();
+    }
+
+/// -----------------------------------------------------------------------------
+// Enables/disables search from remote email server.
+// Leaves KErrNotReady if search is ongoing.
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::SetRemoteSearchL( TBool aRemote )  
+    {    
+    IsSearchGoingOnL();
+
+    iRemote = aRemote;
+    // Release gate
+    iGate.Signal();
+    // Currently plugins do not support this function
+    User::Leave( KErrNotSupported );    
+    }
+
+// -----------------------------------------------------------------------------
+// Indicates whether remote search is enabled.
+// -----------------------------------------------------------------------------
+TBool CEmailMessageSearchAsync::IsRemoteSearch() const
+    {
+    // Currently plugins do not support this function
+    return EFalse; 
+    }
+
+// -----------------------------------------------------------------------------
+// Starts search, all methods affecting search attribures leave
+// KErrNotReady while search is ongoing.
+// @param aObserver called when results are available.
+//     
+void CEmailMessageSearchAsync::StartSearchL( MEmailSearchObserver& aObserver )
+    {
+    IsSearchGoingOnL();
+
+    iObserver = &aObserver;
+    const TFSMailMsgId fsMailboxId( iPluginData.Uid(), iMailboxId.iId );
+    RArray <TFSMailMsgId> folderIds;
+
+    /** Search API */
+
+    /**
+     * Asyncronous call for starting search for given string. Only one search can be
+     * performed at a time.
+     *
+     *
+     * This function will search for message's containing the given search string.
+     * The search will be performed on the all message fields: To, Cc, Bcc, subject, body.
+     * The search client will be notified of each found message,
+     * and upon completion of the search.  Only one search can be performed at a time.  
+     *  
+     * To change the sort order in the search result, use the same search string in the
+     * but change the aSortCriteria parameter.  The store "caches" the search
+     * results generated by the same search string.
+     *    
+     * The function will leave with KErrInUse if a search is already in progress.
+     *
+     * /note Only works if the store is in an authenticated state,
+     *  otherwise this function leaves with KErrNotReady
+     * 
+     * @paran aMailBoxId id of the mailbox where messages are to be searched
+     * @param aFolderIds list of folders where messages are to be searched
+     *        global or folder specific search depends on the size of array is 0 or not.
+     * @param aSearchStrings text strings that will be searched from different message fields.
+     * @param aSortCriteria sort criteria for the results
+     * @param aSearchObserver client observer that will be notified about search status.
+     *
+     */
+    iPlugin->SearchL( fsMailboxId,
+        folderIds,
+        iSearchStrings,
+        iCriteria,
+        *this );
+    // Gate is kept closed as search is asynchronous. Gate will be reopen after search is completed, i.e.
+    // CEmailMessageSearchAsync::SearchCompleted.
+    }
+
+// -----------------------------------------------------------------------------
+// Cancels search.
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::Cancel()
+    {
+    if (KErrNone != iGate.Wait(1))
+        {
+        
+        /**
+         * Cancels current search. Does nothing if there is not any search.
+         * The search client will not be called back after this function is called.
+         *
+         */
+        const TFSMailMsgId fsMailboxId( iPluginData.Uid(), iMailboxId.iId );
+        iPlugin->CancelSearch( fsMailboxId );
+        }
+    else
+        {
+        // Release gate
+        iGate.Signal();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+//  * @return search status:
+//  *     < 0 : Search has failed
+//  *     KRequestPending : search is ongoing. note that status may be
+//  *         KRequestPending after HandleResultL callback because results 
+//  *         may be given in chunks of results. Size of chunk depends on
+//  *         implementation and may vary.
+//  *     KErrNone : initial state, or search has finished
+// -----------------------------------------------------------------------------
+TInt CEmailMessageSearchAsync::Status() const
+    {
+    if (KErrNone != iGate.Wait(1))
+        {
+        // Search is going on
+        return KRequestPending;
+        }
+    else
+        {
+        // Release gate
+        iGate.Signal();       
+        }
+
+    return KErrNone; 
+    }
+
+// -----------------------------------------------------------------------------
+// Resets all search attribures. Cancels search if ongoing. 
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::Reset()
+    {
+    if ( KErrNone != iGate.Wait( 1 ) )
+        {
+        this->Cancel();
+        }
+    
+    iCriteria = TFSMailSortCriteria();
+    iSearchStrings.Reset();
+    
+    // Release gate
+    iGate.Signal();
+    
+    };
+
+// -----------------------------------------------------------------------------
+// Notifies the email search API client that a match has been found
+// 
+// @param aMatchMessage contains a pointer to the matched message.
+//         Ownership is transfered to the observer.
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::MatchFoundL( CFSMailMessage* aMatchMessage )
+{
+    User::LeaveIfNull( iObserver );
+    CEmailMessage *result = CEmailMessage::NewL(iPluginData, aMatchMessage, EClientOwns );
+    iObserver->HandleResultL( result );
+}
+
+// -----------------------------------------------------------------------------
+// Notifies the email search API client that the search has completed
+// -----------------------------------------------------------------------------
+ void CEmailMessageSearchAsync::SearchCompletedL()
+{
+    User::LeaveIfNull( iObserver );
+    iObserver->SearchCompletedL();
+    // Search is now complete, release gate.
+    iGate.Signal();
+}
+
+// -----------------------------------------------------------------------------
+// Asks client if search engine should change search priority 
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::ClientRequiredSearchPriority(TInt* /*apRequiredSearchPriority*/)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Function leaves if search is going on. Otherwise it doesn't do anything.
+// -----------------------------------------------------------------------------
+void CEmailMessageSearchAsync::IsSearchGoingOnL() const
+    {
+    if ( KErrNone != iGate.Wait( 1 ) )
+        {
+        // Leave now, search is going on
+        User::Leave( KErrNotReady );
+        }
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailmultipart.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailAttachment.
+*
+*/
+
+#include "emailcontent.h"
+#include "emailtextcontent.h"
+#include "emailattachment.h"
+#include "emailmultipart.h"
+#include "emailmessage.h"
+#include "emailclientapi.hrh"
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMultipart* CEmailMultipart::NewL( 
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart* aPart,
+        const TDataOwner aOwner ) 
+    {
+    CEmailMultipart* self = new ( ELeave ) CEmailMultipart( aOwner );
+    CleanupStack::PushL( self );
+    self->ConstructL( aPluginData, aMsgContentId, aPart );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::ConstructL(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart* aPart )
+    {
+    iEmailMsgContent = CEmailMessageContent::NewL( aPluginData, aMsgContentId, aPart );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMultipart::~CEmailMultipart()
+    {
+    delete iEmailMsgContent;
+    iChildParts.Reset();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailMultipart::CEmailMultipart( const TDataOwner aOwner ) : iOwner( aOwner )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailMultipart::PartCountL()
+    {
+    iChildParts.Reset();
+    RPointerArray<CFSMailMessagePart> childParts;
+    CleanupResetAndDestroyPushL( childParts );
+    iEmailMsgContent->Part().ChildPartsL( childParts );
+    iChildPartCount = childParts.Count();
+
+    for ( TInt i = 0; i < iChildPartCount; i++ )
+        {
+        TFSMailMsgId id = childParts[i]->GetPartId();
+        iChildParts.AppendL( id );
+        }
+    CleanupStack::PopAndDestroy( &childParts );
+    return iChildPartCount;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMessageContent* CEmailMultipart::PartByIndexL( const TUint aIndex ) const
+    {
+    if ( aIndex >= iChildPartCount )
+        {
+        User::Leave( KErrArgument );
+        }
+    MEmailMessageContent* content = NULL;
+    TFSMailMsgId partId = iChildParts[aIndex];
+    CFSMailMessagePart* copy = iEmailMsgContent->Part().ChildPartL( partId );
+    if ( !copy )
+        return content;
+
+    TContentType contentType( copy->GetContentType() );
+    TMessageContentId msgContentId = TMessageContentId( 
+            copy->GetPartId().Id(),
+            Id().iMessageId.iId,
+            Id().iMessageId.iFolderId.iId,
+            Id().iMessageId.iFolderId.iMailboxId );
+
+    if ( contentType.Equals( KFSMailContentTypeTextPlain ) || 
+         contentType.Equals( KFSMailContentTypeTextHtml ) )
+        {
+        content = CEmailTextContent::NewL( 
+            iEmailMsgContent->PluginData(), msgContentId, copy, EClientOwns );
+        }
+    else if ( contentType.Equals( KFSMailContentTypeMultipartMixed ) ||
+              contentType.Equals( KFSMailContentTypeMultipartAlternative ) ||
+              contentType.Equals( KFSMailContentTypeMultipartDigest ) ||
+              contentType.Equals( KFSMailContentTypeMultipartRelated ) ||
+              contentType.Equals( KFSMailContentTypeMultipartParallel ) )
+        {
+        content = CEmailMultipart::NewL( 
+            iEmailMsgContent->PluginData(), msgContentId, copy, EClientOwns );
+        }
+    else 
+        {
+        content = CEmailAttachment::NewL( 
+            iEmailMsgContent->PluginData(), msgContentId, copy, EClientOwns );
+        } 
+    return content;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::DeletePartL( const TUint aIndex )
+    {
+    if ( aIndex >= iChildPartCount )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    TFSMailMsgId partId = iChildParts[aIndex];
+    iEmailMsgContent->Part().RemoveChildPartL( partId );
+    iChildParts.Remove( aIndex );
+    iChildPartCount--;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::AddPartL(
+        const MEmailMessageContent& aPart,
+        const TUint aPos )
+    {
+    if ( aPos > iChildPartCount )
+        {
+        User::Leave( KErrArgument );
+        }
+
+    TFSMailMsgId insertBefore = TFSMailMsgId();
+    if ( aPos <  iChildPartCount )
+        {
+        insertBefore = iChildParts[aPos];
+        }
+    const TDesC& contentType = aPart.ContentType();
+
+    CFSMailMessagePart* newPart = 
+        iEmailMsgContent->Part().NewChildPartL( insertBefore, contentType );
+    CleanupStack::PushL( newPart );
+    TFSMailMsgId newPartId = newPart->GetPartId(); 
+    iChildParts.InsertL( newPartId, aPos );
+    iChildPartCount = iChildParts.Count();
+    CleanupStack::Pop( newPart );
+    
+
+
+    return;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailMultipart::InterfaceId() const
+    {
+    return KEmailIFUidMultipart;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::Release()
+    {
+    if ( iOwner == EClientOwns )
+        {
+        delete this;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TMessageContentId CEmailMultipart::Id() const
+    {
+    return iEmailMsgContent->Id(); 
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMultipart::ContentType() const
+    {
+    return iEmailMsgContent->ContentType();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetContentType( const TDesC& aContentType )
+    {
+    iEmailMsgContent->SetContentType( aContentType );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMultipart::ContentId() const
+    {
+    return iEmailMsgContent->ContentId();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetContentId( const TDesC& aContentId )
+    {
+    iEmailMsgContent->SetContentId( aContentId );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMultipart::ContentDescription() const
+    {
+    return iEmailMsgContent->ContentDescription();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetContentDescription( const TDesC& aContentDescription )
+    {
+    iEmailMsgContent->SetContentDescription( aContentDescription );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMultipart::ContentDisposition() const
+    {
+    return iEmailMsgContent->ContentDisposition();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetContentDisposition( const TDesC& aContentDisposition )
+    {
+    iEmailMsgContent->SetContentDisposition( aContentDisposition );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMultipart::ContentClass() const
+    {
+    return iEmailMsgContent->ContentClass();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetContentClass( const TDesC& aContentClass )
+    {
+    iEmailMsgContent->SetContentClass( aContentClass );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailMultipart::AvailableSize() const
+    {
+    return iEmailMsgContent->AvailableSize();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailMultipart::TotalSize() const
+    {
+    return iEmailMsgContent->TotalSize();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailMultipart::ContentL() const
+    {
+    User::Leave(KErrNotSupported);
+    return iEmailMsgContent->ContentL();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetContentL( const TDesC& aContent )
+    {
+    iEmailMsgContent->SetContentL( aContent );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::FetchL( MEmailFetchObserver& aObserver )
+    {
+    iEmailMsgContent->FetchL( aObserver );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::CancelFetch()
+    {
+    iEmailMsgContent->CancelFetch();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SaveToFileL( const TDesC& aPath )
+    {
+    iEmailMsgContent->SaveToFileL( aPath );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMultipart* CEmailMultipart::AsMultipartOrNull() const
+    {
+    const MEmailMultipart* ptr = this;
+    return const_cast<MEmailMultipart*>( ptr );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailTextContent* CEmailMultipart::AsTextContentOrNull() const
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAttachment* CEmailMultipart::AsAttachmentOrNull() const
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailMultipart::SetOwner( const TDataOwner aOwner )
+    {
+    iOwner = aOwner;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/emailtextcontent.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CEmailAttachment.
+*
+*/
+
+#include "emailcontent.h"
+#include "emailtextcontent.h"
+#include "emailmessage.h"
+#include "emailclientapi.hrh"
+
+// CEmailTextContent
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailTextContent* CEmailTextContent::NewL( 
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart* aPart,
+        const TDataOwner aOwner ) 
+    {
+    CEmailTextContent* self = new ( ELeave ) CEmailTextContent( aOwner );
+    CleanupStack::PushL( self );
+    self->ConstructL( aPluginData, aMsgContentId, aPart );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::ConstructL(
+        CPluginData& aPluginData,
+        const TMessageContentId& aMsgContentId,
+        CFSMailMessagePart* aPart )
+    {
+    iEmailMsgContent = CEmailMessageContent::NewL( aPluginData, aMsgContentId, aPart );
+    TContentType contentType( aPart->GetContentType() );
+    if ( contentType.Equals( KFSMailContentTypeTextHtml ) )
+        {
+        iTextType = EHtmlText;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailTextContent::~CEmailTextContent()
+    {
+    delete iEmailMsgContent;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CEmailTextContent::CEmailTextContent( TDataOwner aOwner ) : 
+    iTextType( EPlainText ), 
+    iOwner( aOwner )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CEmailTextContent::InterfaceId() const
+    {
+    return KEmailIFUidTextContent;
+    }
+    
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::Release()
+    {
+    if ( iOwner == EClientOwns )
+        {
+        delete this;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailTextContent::TTextType CEmailTextContent::TextType() const
+    {
+    return iTextType;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetTextL(
+            const TTextType aPlainOrHtml,
+            const TDesC& aText )
+    {    
+    iTextType = aPlainOrHtml;
+
+    if( aPlainOrHtml == EPlainText )
+        {
+        SetContentType( KContentTypeTextPlain );
+        }
+    else if( aPlainOrHtml == EHtmlText )
+        {
+        SetContentType( KContentTypeTextHtml );
+        }
+    SetContentL( aText );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TMessageContentId CEmailTextContent::Id() const
+    {
+    return iEmailMsgContent->Id(); 
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailTextContent::ContentType() const
+    {
+    return iEmailMsgContent->ContentType();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetContentType( const TDesC& aContentType )
+    {
+    iEmailMsgContent->SetContentType( aContentType );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailTextContent::ContentId() const
+    {
+    return iEmailMsgContent->ContentId();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetContentId( const TDesC& aContentId )
+    {
+    iEmailMsgContent->SetContentId( aContentId );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailTextContent::ContentDescription() const
+    {
+    return iEmailMsgContent->ContentDescription();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetContentDescription( const TDesC& aContentDescription )
+    {
+    iEmailMsgContent->SetContentDescription( aContentDescription );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailTextContent::ContentDisposition() const
+    {
+    return iEmailMsgContent->ContentDisposition();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetContentDisposition( const TDesC& aContentDisposition )
+    {
+    iEmailMsgContent->SetContentDisposition( aContentDisposition );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailTextContent::ContentClass() const
+    {
+    return iEmailMsgContent->ContentClass();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetContentClass( const TDesC& aContentClass )
+    {
+    iEmailMsgContent->SetContentClass( aContentClass );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailTextContent::AvailableSize() const
+    {
+    return iEmailMsgContent->AvailableSize();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TInt CEmailTextContent::TotalSize() const
+    {
+    return iEmailMsgContent->TotalSize();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TPtrC CEmailTextContent::ContentL() const
+    {
+    return iEmailMsgContent->ContentL();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetContentL( const TDesC& aContent )
+    {
+    iEmailMsgContent->SetContentL( aContent );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::FetchL( MEmailFetchObserver& aObserver )
+    {
+    iEmailMsgContent->FetchL( aObserver );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::CancelFetch()
+    {
+    iEmailMsgContent->CancelFetch();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SaveToFileL( const TDesC& aPath )
+    {
+    iEmailMsgContent->SaveToFileL( aPath );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMultipart* CEmailTextContent::AsMultipartOrNull() const
+    {    
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailTextContent* CEmailTextContent::AsTextContentOrNull() const
+    {
+    const MEmailTextContent* ptr = this;
+    return const_cast<MEmailTextContent *>(ptr);
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailAttachment* CEmailTextContent::AsAttachmentOrNull() const
+    {
+    return NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CEmailTextContent::SetOwner( const TDataOwner aOwner )
+    {
+    iOwner = aOwner;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/implproxy.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ECom impementation proxy for Email client API
+*
+*/
+
+#include "emailclientapiimpl.hrh"
+#include "emailclientapiimpl.h"
+#include "emailinterfacefactoryimpl.h"
+#include <implementationproxy.h>	//TImplementationProxy
+
+// -----------------------------------------------------------------------------
+// Defines the pairing required by the ECOM framework to correctly identify the
+// instantiation method pointer for client's request.
+// -----------------------------------------------------------------------------
+const TImplementationProxy ImplementationTable[] =
+    {
+    IMPLEMENTATION_PROXY_ENTRY(
+            KEmailClientApiImplUid,
+            CEmailInterfaceFactoryImpl::NewL )
+    };
+
+// -----------------------------------------------------------------------------
+// Returns the TImplementationProxy for email client api implementation
+// -----------------------------------------------------------------------------
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy );
+
+    return ImplementationTable;
+    }
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailclientapi/src/messageiterator.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,319 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file implements class CMessageIterator.
+*
+*/
+
+#include "emailmessage.h"
+#include "messageiterator.h"
+#include "emailapiutils.h"
+#include "cfsmailplugin.h"
+#include "emailapiutils.h"
+#include "emailclientapi.hrh"
+#include "mfsmailiterator.h"
+
+// number of messages in chunk to retrive from protocol plugin. Actual chunk
+// size is one less because last element is used for reference to next chunk
+// retrieval. See ReadNextChunkL() for details.
+const TInt KMessageChunkSize = 5;
+
+const TInt KUndefined = -1;
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CMessageIterator* CMessageIterator::NewL( 
+    MFSMailIterator* aIterator,
+    CPluginData& aPluginData,
+    TUint aCount )
+    {
+    CMessageIterator* iter = new ( ELeave ) 
+        CMessageIterator( aIterator, aPluginData, aCount );
+    return iter;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CMessageIterator::~CMessageIterator()
+    {
+    iPluginData.ReleaseInstance();
+    TInt count = iMessageArray.Count();
+    iMessageArray.ResetAndDestroy();
+    for ( TInt i = count; i < iFsMessageArray.Count(); i++ )
+        {
+        delete iFsMessageArray[i];
+        }
+    iFsMessageArray.Reset();
+    delete iIterator;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TEmailTypeId CMessageIterator::InterfaceId() const
+    {
+    return KEmailIFUidMessageIterator;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CMessageIterator::Release()
+    {
+    delete this;
+    }
+
+// -----------------------------------------------------------------------------
+// Returns next message
+// Messages are retrieved from protocol plugin in chunks of x messages and
+// when NextL has be called for x times, next chunk is retrieved. This
+// is trade-off between RAM consumption and speed.
+// -----------------------------------------------------------------------------
+MEmailMessage* CMessageIterator::NextL()
+    {
+    if ( iCursor == KUndefined )
+        {
+        // Buffer empty, read the first chunk
+        if ( !ReadNextChunkL() )
+            {
+            // No messages found, 
+            // Reset the cursor and return NULL
+            iCursor = KUndefined;
+            iStartMsgId = TFSMailMsgId();
+            return NULL;
+            }
+        // Items found, return the first item in the buffer
+        iCursor = 0;
+        }
+    else
+        {
+        // Iterate to the next item
+        iCursor++;
+        }
+    return ReadFromChunkL();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMessage* CMessageIterator::PreviousL()
+    {
+    if ( iCursor == KUndefined )
+        {
+        iStartMsgId = TFSMailMsgId();
+        // Buffer empty, client should first call NextL
+        return NULL;
+        }
+    // Iterate to the previous item
+    iCursor--;
+    return ReadFromChunkL();
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TBool CMessageIterator::ReadNextChunkL()
+    {
+    User::LeaveIfNull( iIterator );
+    
+    TBool chunkFound = EFalse;
+
+    // Delete previous items if exist
+    CleanCache();
+    iHasMoreNextItems = iIterator->NextL(
+            iStartMsgId,
+            KMessageChunkSize,
+            iFsMessageArray );
+    if ( iFsMessageArray.Count() > 0 )
+        {
+        chunkFound = ETrue;
+        // Set the cursor to the first item 
+        iCursor = 0;
+        iHasMorePrevItems = ETrue;
+        }
+    return chunkFound;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TBool CMessageIterator::ReadPreviousChunkL()
+    {
+    User::LeaveIfNull( iIterator );
+
+    TBool chunkFound = EFalse;
+
+    // Delete previous items if exist
+    CleanCache();
+    RPointerArray<CFSMailMessage> tmp;
+    iHasMorePrevItems = iIterator->PreviousL(
+            iStartMsgId,
+            KMessageChunkSize, 
+            tmp );
+    TInt count = tmp.Count();
+    if ( count > 0 )
+        {
+        // It seems that items have been found
+        // Set the cursor to the end of array
+        iCursor = count - 1;
+        iHasMoreNextItems = ETrue;
+        chunkFound = ETrue;
+        // Revise the order of the buffer.
+        // Create complete cache, so it is easier to iterate, 
+        // as now we have to start from the end of cache
+        for ( TInt i = count; i > 0; i-- )
+            {
+            CFSMailMessage* msg = tmp[i-1];
+            iFsMessageArray.AppendL( msg );
+            AddToCacheL( msg );
+            }
+        }
+
+    return chunkFound;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+MEmailMessage* CMessageIterator::ReadFromChunkL()
+    {
+    if ( iCursor >= KMessageChunkSize )
+        {
+        if ( iHasMoreNextItems )
+            {
+            iStartMsgId = iFsMessageArray[iCursor-1]->GetMessageId();
+            if ( !ReadNextChunkL() )
+                {
+                // No more items found, 
+                // set the cursor to the previous item,
+                // and return NULL.
+                iCursor--;
+                return NULL;
+                }
+            }
+        else
+            {
+            // No more items found, 
+            // set the cursor to the previous item,
+            // and return NULL.
+            iCursor--;
+            return NULL;
+            }
+        }
+    else if ( iCursor < 0 )
+        {
+        iStartMsgId = iFsMessageArray[0]->GetMessageId();
+        if ( iHasMorePrevItems )
+            {
+            if ( !ReadPreviousChunkL() )
+                {
+                // Buffer is empty now, client should call nextL,
+                // and start reading from the start of the buffer
+                iCursor = KUndefined;
+                return NULL;
+                }
+            }
+        else
+            {
+            // Buffer is empty now, client should call nextL,
+            // and start reading from the start of the buffer
+            iCursor = KUndefined;   
+            return NULL;
+            }
+        }
+
+    if ( iCursor < iFsMessageArray.Count() )
+        {
+        /* There are items to read in the cache */
+        if ( iCursor >= iMessageArray.Count() )
+            {
+            AddToCacheL( iFsMessageArray[iCursor] );
+            }
+        return iMessageArray[iCursor];
+        }
+    else
+        {
+        // No more items found,
+        // set the cursor to the previous item,
+        // and return NULL.
+        iCursor--;
+        return NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CMessageIterator::AddToCacheL( CFSMailMessage* aFsMsg )
+    {
+    CEmailMessage* message = CEmailMessage::NewL( iPluginData, aFsMsg, EAPIOwns );
+    iMessageArray.AppendL( message );
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CMessageIterator::CleanCache()
+    {
+    // This is strange loop indeed
+    // Both arrays has items that are deleted, iMessageArray has objects that point to iFsMessageArray
+    // Index in both arrays goes syncronously
+    // To prevent double destruction, first delete iMessageArray onjects and then the rest of the iFsMessageArray
+    TInt count = iMessageArray.Count();
+    iMessageArray.ResetAndDestroy();
+    for ( TInt i = count; i < iFsMessageArray.Count(); i++ )
+        {
+        iFsMessageArray.Remove( count );
+        }
+    iFsMessageArray.Reset();    
+    }
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+TUint CMessageIterator::Count() const
+    {
+    return iCount;
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+void CMessageIterator::ConstructL()
+    {
+    iPlugin = iPluginData.ClaimInstanceL();
+    
+    }
+
+// -----------------------------------------------------------------------------
+// 
+// -----------------------------------------------------------------------------
+CMessageIterator::CMessageIterator( 
+    MFSMailIterator* aIterator,
+    CPluginData& aPluginData,
+    TUint aCount ) :
+    iIterator( aIterator ),
+    iPluginData( aPluginData ),
+    iStartMsgId( TFSMailMsgId() ),
+    iState( EReadNextMessageChunk ),
+    iFsMessageArray( KMessageChunkSize ),
+    iCount( aCount ),
+    iCursor ( KUndefined ),
+    iFirstMsgId( TFSMailMsgId() ),
+    iHasMoreNextItems( ETrue ),
+    iHasMorePrevItems( ETrue )
+    {
+    }
+
+// End of file
--- a/emailservices/emaildebug/inc/emailtrace.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emaildebug/inc/emailtrace.h	Thu Jun 24 14:32:18 2010 +0300
@@ -18,47 +18,43 @@
 #ifndef EMAILTRACE_H
 #define EMAILTRACE_H
 
-#include <e32debug.h>
-#include <qdebug.h>
-#include <qfile.h>
-
-/*
- * The NM_TRACING_SYSTEM macro can be used to enable and disable the tracing
- * system in debug mode. The tracing system can be disabled in a specific
- * source file by defining the macro "NM_TRACING_SYSTEM 0" before this file
- * is included.
- */
-#ifndef NM_TRACING_SYSTEM
-#define NM_TRACING_SYSTEM 1
-#endif
+#include <QCoreApplication>
+#include <QDebug>
+#include <QFile>
+#include <QThread>
 
 /*
  * The macros NM_COMMENT_TRACES, NM_ERROR_TRACES, and NM_FUNCTION_TRACES
  * control which debug messages are printed. The trace logging is controlled
- * with the NM_LOG_TO_FILE macro, whereas the NM_LOG_FILE macro defines which
- * file is to be used in logging. The print_trace() helper function implements
- * printing. If NM_LOG_TO_FILE is zero or the NM_LOG_FILE cannot be opened,
- * the messages are printed to qDebug().
+ * with the NM_LOG_TO_FILE macro, whereas the NM_LOG_DIRECTORY macro defines
+ * which directory is to be used to store the log files. The print_trace()
+ * helper function implements printing. Log files are named according to
+ * process and thread IDs. If NM_LOG_TO_FILE is zero or a log file cannot be
+ * opened, the messages are printed to qDebug(). The DSC2STR() function can
+ * be used to convert Symbian descriptors to QString objects.
  */
-#if NM_TRACING_SYSTEM && (defined(DEBUG) || defined(_DEBUG))
+#if defined(DEBUG) || defined(_DEBUG)
 
-#define NM_COMMENT_TRACES  1
-#define NM_ERROR_TRACES    1
-#define NM_FUNCTION_TRACES 1
+#define NM_COMMENT_TRACES  0
+#define NM_ERROR_TRACES    0
+#define NM_FUNCTION_TRACES 0
 
 #if NM_COMMENT_TRACES || NM_ERROR_TRACES || NM_FUNCTION_TRACES
 
-#define NM_LOG_TO_FILE 0
-#define NM_LOG_FILE    "c:/data/logs/nmail_trace.log"
+#define NM_LOG_TO_FILE   1
+#define NM_LOG_DIRECTORY "c:/data/logs/"
 
 inline void print_trace(const QString& msg)
 {
-    static QFile file(NM_LOG_FILE);
+    static QFile file(NM_LOG_DIRECTORY+
+                      QString("nmail_p%1_t%2.log").
+                      arg(QCoreApplication::applicationPid()).
+                      arg(QThread::currentThreadId()));
     if (NM_LOG_TO_FILE && !file.isOpen()) {
         file.open(QIODevice::Append | QIODevice::Text);
     }
     if (file.isWritable()) {
-        QDebug(&file).nospace() << "[Nmail] " << msg << '\n';
+        QDebug(&file).nospace() << msg << '\n';
     } else {
         qDebug().nospace() << "[Nmail] " << msg;
     }
@@ -66,6 +62,16 @@
 
 #endif
 
+inline QString DSC2STR(const TDesC& dsc)
+{
+    return QString::fromRawData(reinterpret_cast<const QChar*>(dsc.Ptr()),
+                                dsc.Length());
+}
+
+#else
+
+#define DSC2STR(dsc)
+
 #endif /* DEBUG */
 
 /*
@@ -142,7 +148,7 @@
 #define ERROR_3(err,msg,arg1,arg2,arg3)\
 do {\
     QString __msg;\
-    __msg.sprintf(msg,arg1,srg2,arg3);\
+    __msg.sprintf(msg,arg1,arg2,arg3);\
     NM_ERROR(err,__msg);\
 } while(0)
 #define ERROR_GEN(msg) ERROR(KErrGeneral,msg)
@@ -162,10 +168,12 @@
 
 /*
  * The macro NM_FUNCTION, when used inside a function body, enables tracing
- * for a function. ENTER and RETURN messages are printed when entering into
+ * for a function. If used, it should be placed on the first line of the
+ * function body. ENTER and RETURN messages are printed when entering into
  * and returning from a function, respectively. In case of an exception,
- * UNWIND (for stack unwinding) is printed. The FUNC_LOG macro is provided
- * for legacy compatibility. It is deprecated and should not be used.
+ * UNWIND (for stack unwinding) is printed instead of RETURN. The FUNC_LOG
+ * macro is provided for legacy compatibility. It is deprecated and should
+ * not be used.
  */
 #if NM_FUNCTION_TRACES
 
--- a/emailservices/emailframework/src/CFSMailClient.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailframework/src/CFSMailClient.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -188,7 +188,7 @@
 {
     NM_FUNCTION;
     
-	CFSMailPlugin* plugin = iFWImplementation->GetPluginManager().GetPluginByUid(aFolderId);
+	CFSMailPlugin* plugin = iFWImplementation->GetPluginManager().GetPluginByUid(aMailBoxId);
 	if(plugin)
 	{
 		plugin->DeleteMessagesByUidL(aMailBoxId,aFolderId,aMessages);
--- a/emailservices/emailstore/base_plugin/inc/BasePlugin.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailstore/base_plugin/inc/BasePlugin.h	Thu Jun 24 14:32:18 2010 +0300
@@ -50,6 +50,7 @@
 class CMailboxInfo;
 class CSearchHandler;
 class HMailIterator;
+class CDelayedOp;
 class CDelayedOpsManager;
 class MDelayedOpsManager;
 
@@ -831,6 +832,7 @@
         RPointerArray<MFSMailEventObserver> iObservers;
         //async fetch reqs.
         RPointerArray<CFetchRequester> iReqs;
+        RPointerArray<CDelayedOp> iDelayedOpReqs;
 
         TCacheLine iCacheLine;
 
--- a/emailservices/emailstore/base_plugin/inc/baseplugindelayedops.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailstore/base_plugin/inc/baseplugindelayedops.h	Thu Jun 24 14:32:18 2010 +0300
@@ -108,6 +108,10 @@
     MDelayedOpsManager* iManager;   //not owned
     CBasePlugin* iPlugin;           //not owned
     
+public:
+    TInt iRequestId;
+    MFSMailRequestObserver* iOperationObserver;
+    
     __LOG_DECLARATION
     };
 
--- a/emailservices/emailstore/base_plugin/inc/baseplugindelayedopsprivate.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailstore/base_plugin/inc/baseplugindelayedopsprivate.h	Thu Jun 24 14:32:18 2010 +0300
@@ -231,8 +231,6 @@
     TFSMailMsgId iMailBox;
     RPointerArray<CFSMailMessage> iMessages;
     RPointerArray<CFSMailMessagePart> iMessageParts;
-    MFSMailRequestObserver& iOperationObserver;
-    TInt iRequestId;
     TInt iType;
     // Data buffer for async operations
     HBufC8* iDataBuffer;
@@ -273,8 +271,6 @@
 private:
     CBasePlugin& iBasePlugin;
     TFSMailMsgId iMailBox;
-    MFSMailRequestObserver& iOperationObserver;
-    TInt iRequestId;
 
     __LOG_DECLARATION
     };
@@ -342,8 +338,6 @@
     TFSMailMsgId iPartId;
     HBufC* iContentType;
     HBufC* iFilePath;
-    MFSMailRequestObserver& iOperationObserver;
-    TInt iRequestId;
     TInt iActionType;
     __LOG_DECLARATION
     };
--- a/emailservices/emailstore/base_plugin/src/BasePlugin.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailstore/base_plugin/src/BasePlugin.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -131,6 +131,8 @@
     iReqs.ResetAndDestroy();
     iReqs.Close();
     
+    iDelayedOpReqs.ResetAndDestroy();
+    iDelayedOpReqs.Close();
     ResetCache();
 
     __LOG_DESTRUCT
@@ -800,6 +802,7 @@
      CDelayedMessageToSendOp* delayedOp = CDelayedMessageToSendOp::NewLC(
     *this,aMailBoxId,aOperationObserver,aRequestId);
     iDelayedOpsManager->EnqueueOpL( delayedOp );
+    iDelayedOpReqs.AppendL(delayedOp);
     CleanupStack::Pop( delayedOp );      
     }
  // </qmail> 
--- a/emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailstore/base_plugin/src/baseplugindelayedops.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -613,10 +613,12 @@
     MFSMailRequestObserver& aOperationObserver,
     const TInt aRequestId)
     : iMailBox( aMailBox ), 
-      iOperationObserver( aOperationObserver ),
-      iRequestId( aRequestId ),
       iType(EHeaders)
     {
+    
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
+       
     for(TInt i=0; i < messages.Count(); i++)
         {
         iMessages.Append(messages[i]);
@@ -630,10 +632,12 @@
     RPointerArray<CFSMailMessagePart>& aMessageParts,
     MFSMailRequestObserver& aOperationObserver,
     const TInt aRequestId)
-    :iOperationObserver( aOperationObserver ),
-    iRequestId( aRequestId ),
-    iType(EParts)
+    :iType(EParts)
     {
+    
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
+    
     for(TInt i=0; i < aMessageParts.Count(); i++)
         {
         iMessageParts.Append(aMessageParts[i]);
@@ -704,8 +708,12 @@
         progress.iError = KErrNone;
         progress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
         }
-
-    iOperationObserver.RequestResponseL( progress, iRequestId );
+		
+		if(iOperationObserver)
+			{
+				iOperationObserver->RequestResponseL( progress, iRequestId );
+			}
+    
     
     __LOG_EXIT;
     }
@@ -714,35 +722,39 @@
 /**
  * 
  */
-void CDelayedMessageStorerOp::StorePartL(
-        CFSMailMessagePart* aPart)
+void CDelayedMessageStorerOp::StorePartL(CFSMailMessagePart* aPart)
     {
     User::LeaveIfNull(aPart);
-    
+
     // Text buffer for html text content
     HBufC* data16 = aPart->GetLocalTextContentLC();
 
-    TPtrC8 ptr8(reinterpret_cast<const TUint8*>( data16->Ptr() ),
-            data16->Size() );
-    
+    // Convert from 16 to 8 bit data -
+    HBufC8* dataBuffer = HBufC8::NewLC((data16->Length() * 2) + 1);
+    TPtr8 ptr8(dataBuffer->Des());
+    CnvUtfConverter::ConvertFromUnicodeToUtf8(ptr8, *data16);
+
     //get msgstore part
-    CMailboxInfo& mailBox = GetPlugin().GetMailboxInfoL( aPart->GetMailBoxId().Id() );
-    
+    CMailboxInfo& mailBox = GetPlugin().GetMailboxInfoL(
+            aPart->GetMailBoxId().Id());
+
     CMsgStoreMessage* msg = mailBox().FetchMessageL(
-            aPart->GetMessageId().Id(), KMsgStoreInvalidId );
-    CleanupStack::PushL( msg );
-    
-    CMsgStoreMessagePart* part= msg->ChildPartL( aPart->GetPartId().Id(), ETrue );
-    
-    CleanupStack::PopAndDestroy( msg );
-    CleanupStack::PushL( part );
+            aPart->GetMessageId().Id(), KMsgStoreInvalidId);
+    CleanupStack::PushL(msg);
+
+    CMsgStoreMessagePart* part = msg->ChildPartL(aPart->GetPartId().Id(),
+            ETrue);
+
+    CleanupStack::PopAndDestroy(msg);
+    CleanupStack::PushL(part);
 
     //replace content
     part->ReplaceContentL(ptr8);
-    
-    CleanupStack::PopAndDestroy( part );
-    CleanupStack::PopAndDestroy( data16 );
-       
+
+    CleanupStack::PopAndDestroy(part);
+    CleanupStack::PopAndDestroy(dataBuffer);
+    CleanupStack::PopAndDestroy(data16);
+
     }
 
 
@@ -794,10 +806,11 @@
     MFSMailRequestObserver& aOperationObserver,
     const TInt aRequestId)
     : iBasePlugin(aPlugin), 
-      iMailBox( aMailBox ), 
-      iOperationObserver( aOperationObserver ),
-      iRequestId( aRequestId )
+      iMailBox( aMailBox )
     {
+    
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
 
     }
 
@@ -821,7 +834,10 @@
         progress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
         }
 
-    iOperationObserver.RequestResponseL( progress, iRequestId );
+		if(iOperationObserver)
+			{
+				iOperationObserver->RequestResponseL( progress, iRequestId );
+			}
     
     __LOG_EXIT;
     }
@@ -885,10 +901,10 @@
     iParentFolderId( aParentFolderId ),
     iMessageId( aMessageId ),
     iParentPartId( aParentPartId ),
-    iOperationObserver( aOperationObserver ),
-    iRequestId( aRequestId ),
     iActionType( AddNewChild)
     {
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
     }
 
 /**
@@ -907,10 +923,10 @@
     iMessageId( aMessageId ),
     iParentPartId( aParentPartId ),
     iPartId( aPartId ),
-    iOperationObserver( aOperationObserver ),
-    iRequestId( aRequestId ),
     iActionType( RemoveChild)
     {
+    CDelayedOp::iOperationObserver = &aOperationObserver ;
+    CDelayedOp::iRequestId =  aRequestId ;
     }
 
 /**
@@ -978,7 +994,10 @@
         progress.iProgressStatus = TFSProgress::EFSStatus_RequestComplete;
         }
 		
-    iOperationObserver.RequestResponseL( progress, iRequestId );
+		if(iOperationObserver)
+			{
+				iOperationObserver->RequestResponseL( progress, iRequestId );
+			}
     
     __LOG_EXIT;
     }
--- a/emailservices/emailstore/base_plugin/src/basepluginmisc.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/emailstore/base_plugin/src/basepluginmisc.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -384,6 +384,23 @@
     		break;
     		}
     	}
+    count = iDelayedOpReqs.Count();
+    for ( TInt i = 0; i < count; i++ )
+        {
+        if ( iDelayedOpReqs[i]->iRequestId == aRequestId )
+            {
+            CDelayedOp* request = iDelayedOpReqs[i];
+            TFSProgress progress = TFSProgress();
+            progress.iProgressStatus = TFSProgress::EFSStatus_RequestCancelled;
+            progress.iCounter = progress.iMaxCount = 1;
+            progress.iError = KErrNone;
+            request->iOperationObserver->RequestResponseL( progress, aRequestId );
+            iDelayedOpsManager->DequeueOp(*request);
+            iDelayedOpReqs.Remove( i );
+            delete request;
+            break;
+            }
+        }
     }
 
 
--- a/emailservices/nmailagent/nmailagent.pro	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmailagent/nmailagent.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -51,13 +51,14 @@
                              "conf/2002C326.txt                  /epoc32/release/winscw/urel/z/private/10202BE9/2002C326.txt" \
                              "conf/2002C326.txt                  /epoc32/data/z/private/10202BE9/2002C326.txt"
 
+    RSS_RULES += "hidden = KAppIsHidden;"
 
     TARGET.EPOCHEAPSIZE = 0x1000 0x100000 // MAX 1MB
 
     LIBS += -ldomaincli
     LIBS += -lxqservice
     LIBS += -lxqsettingsmanager
-    #LIBS += -lxqsystemtoneservice
+    LIBS += -lxqsystemtoneservice
     LIBS += -lhwrmvibraclient
 
     TARGET.UID2 = 0x100039CE
--- a/emailservices/nmailagent/src/nmmailagent.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmailagent/src/nmmailagent.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -31,7 +31,7 @@
 const int NmAgentIndicatorNotSet = -1;
 const int NmAgentAlertToneTimer = 60000; // 60s
 const int NmAgentDefaultVibraDuration = 1000; // 1 second
-static const quint32 NmRepositoryId = 0x2002C326; 
+static const quint32 NmRepositoryId = 0x2002C326;
 static const QString NmMailboxIndicatorType = "com.nokia.nmail.indicatorplugin_%1/1.0";
 static const QString NmSendIndicatorName = "com.nokia.nmail.indicatorplugin.send/1.0";
 static const QString NmUnreadIndicatorName = "com.nokia.nmail.indicatorplugin.unread/1.0";
@@ -99,8 +99,8 @@
         return false;
     }
 
-    //mSystemTone = new XQSystemToneService();
-    
+    mSystemTone = new XQSystemToneService();
+
     mIndicator = new HbIndicator();
     connect(mIndicator,SIGNAL(userActivated(const QString &, const QVariantMap&)),
         this, SLOT(indicatorActivated(const QString&, const QVariantMap&)));
@@ -144,11 +144,10 @@
     NM_FUNCTION;
 
     delete mVibra;
-    //delete mSystemTone;
+    delete mSystemTone;
 
     qDeleteAll(mMailboxes);
 
-    //delete mSystemTone;
     NmDataPluginFactory::releaseInstance(mPluginFactory);
 }
 
@@ -332,10 +331,10 @@
     bool changed = false;
     if (mailboxInfo->mActive != active ||
         refreshAlways) {
-        
+
 		// store the new state to permanent storage
         storeMailboxActive(mailboxId, active);
-        
+
         mailboxInfo->mActive = active;
         changed = true;
         if (active) {
@@ -428,17 +427,20 @@
 {
     NM_FUNCTION;
 
+    bool ok(false);
     XQApplicationManager appManager;
     XQAiwRequest *request = appManager.create(
         XQI_EMAIL_INBOX_VIEW, XQOP_EMAIL_INBOX_VIEW, false);
-    
-    QList<QVariant> list;
-    list.append(QVariant(mailboxId));
-    request->setArguments(list);
-    
-    bool ok = request->send();
-    NM_COMMENT(QString("Launch ok=%1 error=%2").arg(ok).arg(request->lastError()));
-    delete request;
+    // Instance might be NULL if the service is not available.
+    if (request) {
+        QList<QVariant> list;
+        list.append(QVariant(mailboxId));
+        request->setArguments(list);
+
+        ok = request->send();
+        NM_COMMENT(QString("Launch ok=%1 error=%2").arg(ok).arg(request->lastError()));
+        delete request;
+    }
     return ok;
 }
 
@@ -479,7 +481,7 @@
         case NmMailboxCreated:
             foreach (NmId mailboxId, mailboxIds) {
                 getMailboxInfo(mailboxId); // create a new mailbox if needed
-                
+
                 // make sure the mailbox activity data is reseted
                 deleteStoredMailboxActivity(mailboxId);
             }
@@ -511,7 +513,7 @@
             foreach (NmId mailboxId, mailboxIds) {
                 // Will hide also the indicator
                 removeMailboxInfo(mailboxId);
-                
+
                 // make sure the mailbox activity data is deleted
                 deleteStoredMailboxActivity(mailboxId);
             }
@@ -551,7 +553,7 @@
 {
     NM_FUNCTION;
     Q_UNUSED(data);
-    
+
     // map the indicator type to mailbox
     NmMailboxInfo *info = getMailboxByType(type);
     if (info) {
@@ -583,45 +585,44 @@
 
     switch (event) {
         case NmMessageCreated: {
+            // Check the new messages to make the indicator appear earlier
             NmMailboxInfo *mailboxInfo = getMailboxInfo(mailboxId);
+            
+            // Inbox folder ID may be still unknown
+            if (mailboxInfo->mInboxFolderId.id() == 0) {
+                NmDataPluginInterface *plugin =
+                    mPluginFactory->interfaceInstance(mailboxId);
 
-            // Check the new messages to make the indicator appear earlier
-            if (mailboxInfo->mSyncState == Synchronizing) {
-                
-                // Inbox folder ID may be still unknown
-                if (mailboxInfo->mInboxFolderId.id()==0) {
-                    NmDataPluginInterface *plugin = mPluginFactory->interfaceInstance(mailboxId);
-                    if (plugin) {
-                        mailboxInfo->mInboxFolderId =
-                            plugin->getStandardFolderId(mailboxId, NmFolderInbox);
-                    }
+                if (plugin) {
+                    mailboxInfo->mInboxFolderId =
+                        plugin->getStandardFolderId(mailboxId, NmFolderInbox);
                 }
-                
-                if (folderId == mailboxInfo->mInboxFolderId) {
-                    foreach (NmId messageId, messageIds) {
-                        bool messageUnread = false;
+            }
+
+            if (folderId == mailboxInfo->mInboxFolderId) {
+                foreach (NmId messageId, messageIds) {
+                    bool messageUnread = false;
 
-                        // Check the message if we can either play a tone or if the "@" is 
-                        // not visible at the moment
-                        if (mAlertToneAllowed || !mUnreadIndicatorActive) {
-                            if (getMessageUnreadInfo(folderId, messageId, mailboxId, messageUnread)) {
-                                if (messageUnread) {
-                                    mailboxInfo->mUnreadMailIdList.append(messageId);
-                                    mailboxInfo->mInboxActive = true;
-                                    updateMailboxState(mailboxId, true, false);
+                    // Check the message if we can either play a tone or if the "@" is
+                    // not visible at the moment
+                    if (mAlertToneAllowed || !mUnreadIndicatorActive) {
+                        if (getMessageUnreadInfo(folderId, messageId, mailboxId, messageUnread)) {
+                            if (messageUnread) {
+                                mailboxInfo->mUnreadMailIdList.append(messageId);
+                                mailboxInfo->mInboxActive = true;
+                                updateMailboxState(mailboxId, true, false);
 
-                                    // make the "@" appear immediatelly
-                                    updateUnreadIndicator(true);
+                                // make the "@" appear immediatelly
+                                updateUnreadIndicator(true);
 
-                                    // Play the tone as well
-                                    playAlertTone();
-                                }
+                                // Play the tone as well
+                                playAlertTone();
                             }
                         }
                     }
                 }
             }
-            
+
             if (folderId==mailboxInfo->mInboxFolderId) {
                 mailboxInfo->mInboxCreatedMessages += messageIds.count();
             }
@@ -635,7 +636,7 @@
                 // Always activate the indicator
                 activate = true;
                 updateNeeded = true;
-                
+
                 mailboxInfo->mOutboxMails += messageIds.count();
 				updateSendIndicator();
             }
@@ -681,13 +682,21 @@
                 // The last mail was now deleted
                 if (mailboxInfo->mOutboxMails == 0) {
 					NM_COMMENT("NmMailAgent: last mail deleted from outbox");
-                    // Keep it active if there is unread mails and inbox is still active
-					if (mailboxInfo->mInboxActive &&
+					updateNeeded = true;
+
+	                // Keep it active if there is unread mails and inbox is still active
+ 				    if (mailboxInfo->mInboxActive &&
 					    mailboxInfo->mUnreadMailIdList.count() > 0) {
 					    activate = true;
-                    }
-                    updateNeeded = true;
-                }
+	                }
+				}
+				else {
+	                // Also update the indicator status if it is already shown
+    	            if (mailboxInfo->mActive) {
+						activate = true;
+            	        updateNeeded = true;
+					}
+				}
 				updateSendIndicator();
             }
             break;
@@ -913,13 +922,15 @@
 	bool played = false;
 
     if (mAlertToneAllowed) {
-        //mSystemTone->playTone(XQSystemToneService::EmailAlertTone);
-        
+        if (mSystemTone) {
+            mSystemTone->playTone(XQSystemToneService::EmailAlertTone);
+        }
+
         // Execute the vibra effect.
         if (mVibra) {
             TRAP_IGNORE(mVibra->StartVibraL(NmAgentDefaultVibraDuration));
         }
-        
+
         // play alert only once per minute
         mAlertToneAllowed = false;
         QTimer::singleShot(NmAgentAlertToneTimer, this, SLOT(enableAlertTone()));
@@ -973,7 +984,7 @@
     XQCentralRepositorySettingsKey key(NmRepositoryId, mailboxId.id());
     XQSettingsManager mgr;
     XQCentralRepositoryUtils utils(mgr);
-    
+
     if (active) {
         // when mailbox is active, key can be deleted
         utils.deleteKey(key);
@@ -984,7 +995,7 @@
 }
 
 /*!
-    Get the mailbox activity state. 
+    Get the mailbox activity state.
     \param mailboxId id of the mailbox
     \return true if the mailbox is active or no information was stored earlier
 */
--- a/emailservices/nmclientapi/bwins/nmailclientapiu.def	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmclientapi/bwins/nmailclientapiu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -187,4 +187,59 @@
 	?setParentFolderId@NmApiFolder@EmailClientApi@@QAEX_K@Z @ 186 NONAME ; void EmailClientApi::NmApiFolder::setParentFolderId(unsigned long long)
 	?start@NmApiFolderListing@EmailClientApi@@UAE_NXZ @ 187 NONAME ; bool EmailClientApi::NmApiFolderListing::start(void)
 	?cancel@NmApiFolderListing@EmailClientApi@@UAEXXZ @ 188 NONAME ; void EmailClientApi::NmApiFolderListing::cancel(void)
+	?metaObject@NmApiMessageManager@EmailClientApi@@UBEPBUQMetaObject@@XZ @ 189 NONAME ; struct QMetaObject const * EmailClientApi::NmApiMessageManager::metaObject(void) const
+	?tr@NmApiMessageManager@EmailClientApi@@SA?AVQString@@PBD0H@Z @ 190 NONAME ; class QString EmailClientApi::NmApiMessageManager::tr(char const *, char const *, int)
+	?createReplyMessage@NmApiMessageManager@EmailClientApi@@QAE_NPBVQVariant@@_N@Z @ 191 NONAME ; bool EmailClientApi::NmApiMessageManager::createReplyMessage(class QVariant const *, bool)
+	?saveMessage@NmApiMessageManager@EmailClientApi@@QAE_NABUNmApiMessage@@@Z @ 192 NONAME ; bool EmailClientApi::NmApiMessageManager::saveMessage(struct NmApiMessage const &)
+	?messagesCopied@NmApiMessageManager@EmailClientApi@@IAEXH@Z @ 193 NONAME ; void EmailClientApi::NmApiMessageManager::messagesCopied(int)
+	??_ENmApiMessageManager@EmailClientApi@@UAE@I@Z @ 194 NONAME ; EmailClientApi::NmApiMessageManager::~NmApiMessageManager(unsigned int)
+	?tr@NmApiMailboxSettings@EmailClientApi@@SA?AVQString@@PBD0H@Z @ 195 NONAME ; class QString EmailClientApi::NmApiMailboxSettings::tr(char const *, char const *, int)
+	?loadSettings@NmApiMailboxSettings@EmailClientApi@@QAE_N_KAAVNmApiMailboxSettingsData@2@@Z @ 196 NONAME ; bool EmailClientApi::NmApiMailboxSettings::loadSettings(unsigned long long, class EmailClientApi::NmApiMailboxSettingsData &)
+	?removeAttachment@NmApiMessageManager@EmailClientApi@@QAE_NAAVNmApiEmailMessage@@_K@Z @ 197 NONAME ; bool EmailClientApi::NmApiMessageManager::removeAttachment(class NmApiEmailMessage &, unsigned long long)
+	?copyMessages@NmApiMessageManager@EmailClientApi@@QAE_NV?$QList@_K@@_K1@Z @ 198 NONAME ; bool EmailClientApi::NmApiMessageManager::copyMessages(class QList<unsigned long long>, unsigned long long, unsigned long long)
+	??1NmApiMessageManager@EmailClientApi@@UAE@XZ @ 199 NONAME ; EmailClientApi::NmApiMessageManager::~NmApiMessageManager(void)
+	?tr@NmApiMessageManager@EmailClientApi@@SA?AVQString@@PBD0@Z @ 200 NONAME ; class QString EmailClientApi::NmApiMessageManager::tr(char const *, char const *)
+	?listSettings@NmApiMailboxSettingsData@EmailClientApi@@QBE?AV?$QList@H@@XZ @ 201 NONAME ; class QList<int> EmailClientApi::NmApiMailboxSettingsData::listSettings(void) const
+	?trUtf8@NmApiMessageManager@EmailClientApi@@SA?AVQString@@PBD0@Z @ 202 NONAME ; class QString EmailClientApi::NmApiMessageManager::trUtf8(char const *, char const *)
+	?mailboxDeleted@NmApiMailboxSettings@EmailClientApi@@IAEXH@Z @ 203 NONAME ; void EmailClientApi::NmApiMailboxSettings::mailboxDeleted(int)
+	?staticMetaObject@NmApiMailboxSettings@EmailClientApi@@2UQMetaObject@@B @ 204 NONAME ; struct QMetaObject const EmailClientApi::NmApiMailboxSettings::staticMetaObject
+	?messagesDeleted@NmApiMessageManager@EmailClientApi@@IAEXH@Z @ 205 NONAME ; void EmailClientApi::NmApiMessageManager::messagesDeleted(int)
+	??0NmApiMailboxSettingsData@EmailClientApi@@QAE@XZ @ 206 NONAME ; EmailClientApi::NmApiMailboxSettingsData::NmApiMailboxSettingsData(void)
+	?trUtf8@NmApiMessageManager@EmailClientApi@@SA?AVQString@@PBD0H@Z @ 207 NONAME ; class QString EmailClientApi::NmApiMessageManager::trUtf8(char const *, char const *, int)
+	?metaObject@NmApiMailboxSettings@EmailClientApi@@UBEPBUQMetaObject@@XZ @ 208 NONAME ; struct QMetaObject const * EmailClientApi::NmApiMailboxSettings::metaObject(void) const
+	?messagesMoved@NmApiMessageManager@EmailClientApi@@IAEXH@Z @ 209 NONAME ; void EmailClientApi::NmApiMessageManager::messagesMoved(int)
+	?saveSettings@NmApiMailboxSettings@EmailClientApi@@QAE_NABVNmApiMailboxSettingsData@2@@Z @ 210 NONAME ; bool EmailClientApi::NmApiMailboxSettings::saveSettings(class EmailClientApi::NmApiMailboxSettingsData const &)
+	?fetch@NmApiMessageManager@EmailClientApi@@QAE_NABUNmApiMessage@@@Z @ 211 NONAME ; bool EmailClientApi::NmApiMessageManager::fetch(struct NmApiMessage const &)
+	?createMailbox@NmApiMailboxSettings@EmailClientApi@@QAE_NABVQString@@AAVNmApiMailboxSettingsData@2@@Z @ 212 NONAME ; bool EmailClientApi::NmApiMailboxSettings::createMailbox(class QString const &, class EmailClientApi::NmApiMailboxSettingsData &)
+	?qt_metacast@NmApiMessageManager@EmailClientApi@@UAEPAXPBD@Z @ 213 NONAME ; void * EmailClientApi::NmApiMessageManager::qt_metacast(char const *)
+	??0NmApiMessageManager@EmailClientApi@@QAE@_KPAVQObject@@@Z @ 214 NONAME ; EmailClientApi::NmApiMessageManager::NmApiMessageManager(unsigned long long, class QObject *)
+	?getValue@NmApiMailboxSettingsData@EmailClientApi@@QBE_NHAAVQVariant@@@Z @ 215 NONAME ; bool EmailClientApi::NmApiMailboxSettingsData::getValue(int, class QVariant &) const
+	?tr@NmApiMailboxSettings@EmailClientApi@@SA?AVQString@@PBD0@Z @ 216 NONAME ; class QString EmailClientApi::NmApiMailboxSettings::tr(char const *, char const *)
+	?moveMessages@NmApiMessageManager@EmailClientApi@@QAE_NV?$QList@_K@@_K1@Z @ 217 NONAME ; bool EmailClientApi::NmApiMessageManager::moveMessages(class QList<unsigned long long>, unsigned long long, unsigned long long)
+	??1NmApiMailboxSettingsData@EmailClientApi@@QAE@XZ @ 218 NONAME ; EmailClientApi::NmApiMailboxSettingsData::~NmApiMailboxSettingsData(void)
+	?validateData@NmApiMailboxSettingsData@EmailClientApi@@QBE_NXZ @ 219 NONAME ; bool EmailClientApi::NmApiMailboxSettingsData::validateData(void) const
+	?trUtf8@NmApiMailboxSettings@EmailClientApi@@SA?AVQString@@PBD0H@Z @ 220 NONAME ; class QString EmailClientApi::NmApiMailboxSettings::trUtf8(char const *, char const *, int)
+	?createForwardMessage@NmApiMessageManager@EmailClientApi@@QAE_NPBVQVariant@@@Z @ 221 NONAME ; bool EmailClientApi::NmApiMessageManager::createForwardMessage(class QVariant const *)
+	?listMailboxIds@NmApiMailboxSettings@EmailClientApi@@QAE_NAAV?$QList@_K@@@Z @ 222 NONAME ; bool EmailClientApi::NmApiMailboxSettings::listMailboxIds(class QList<unsigned long long> &)
+	??_ENmApiMailboxSettings@EmailClientApi@@UAE@I@Z @ 223 NONAME ; EmailClientApi::NmApiMailboxSettings::~NmApiMailboxSettings(unsigned int)
+	?getStaticMetaObject@NmApiMailboxSettings@EmailClientApi@@SAABUQMetaObject@@XZ @ 224 NONAME ; struct QMetaObject const & EmailClientApi::NmApiMailboxSettings::getStaticMetaObject(void)
+	?deleteMessages@NmApiMessageManager@EmailClientApi@@QAE_NV?$QList@_K@@@Z @ 225 NONAME ; bool EmailClientApi::NmApiMessageManager::deleteMessages(class QList<unsigned long long>)
+	?createDraftMessage@NmApiMessageManager@EmailClientApi@@QAE_NPBVQVariant@@@Z @ 226 NONAME ; bool EmailClientApi::NmApiMessageManager::createDraftMessage(class QVariant const *)
+	??0NmApiMailboxSettings@EmailClientApi@@QAE@PAVQObject@@@Z @ 227 NONAME ; EmailClientApi::NmApiMailboxSettings::NmApiMailboxSettings(class QObject *)
+	?qt_metacast@NmApiMailboxSettings@EmailClientApi@@UAEPAXPBD@Z @ 228 NONAME ; void * EmailClientApi::NmApiMailboxSettings::qt_metacast(char const *)
+	?qt_metacall@NmApiMessageManager@EmailClientApi@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 229 NONAME ; int EmailClientApi::NmApiMessageManager::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??1NmApiMailboxSettings@EmailClientApi@@UAE@XZ @ 230 NONAME ; EmailClientApi::NmApiMailboxSettings::~NmApiMailboxSettings(void)
+	?deleteMailbox@NmApiMailboxSettings@EmailClientApi@@QAE_N_K@Z @ 231 NONAME ; bool EmailClientApi::NmApiMailboxSettings::deleteMailbox(unsigned long long)
+	?send@NmApiMessageManager@EmailClientApi@@QAE_NABUNmApiMessage@@@Z @ 232 NONAME ; bool EmailClientApi::NmApiMessageManager::send(struct NmApiMessage const &)
+	?trUtf8@NmApiMailboxSettings@EmailClientApi@@SA?AVQString@@PBD0@Z @ 233 NONAME ; class QString EmailClientApi::NmApiMailboxSettings::trUtf8(char const *, char const *)
+	?createAttachment@NmApiMessageManager@EmailClientApi@@QAE_NAAVNmApiEmailMessage@@ABVQVariant@@@Z @ 234 NONAME ; bool EmailClientApi::NmApiMessageManager::createAttachment(class NmApiEmailMessage &, class QVariant const &)
+	?messagesCreated@NmApiMessageManager@EmailClientApi@@IAEXH@Z @ 235 NONAME ; void EmailClientApi::NmApiMessageManager::messagesCreated(int)
+	?setMailboxId@NmApiMailboxSettingsData@EmailClientApi@@QAEX_K@Z @ 236 NONAME ; void EmailClientApi::NmApiMailboxSettingsData::setMailboxId(unsigned long long)
+	?populateDefaultSettings@NmApiMailboxSettings@EmailClientApi@@QAE_NABVQString@@AAVNmApiMailboxSettingsData@2@@Z @ 237 NONAME ; bool EmailClientApi::NmApiMailboxSettings::populateDefaultSettings(class QString const &, class EmailClientApi::NmApiMailboxSettingsData &)
+	?clearSettings@NmApiMailboxSettingsData@EmailClientApi@@QAEXXZ @ 238 NONAME ; void EmailClientApi::NmApiMailboxSettingsData::clearSettings(void)
+	?setValue@NmApiMailboxSettingsData@EmailClientApi@@QAEXHABVQVariant@@@Z @ 239 NONAME ; void EmailClientApi::NmApiMailboxSettingsData::setValue(int, class QVariant const &)
+	?mailboxId@NmApiMailboxSettingsData@EmailClientApi@@QBE_KXZ @ 240 NONAME ; unsigned long long EmailClientApi::NmApiMailboxSettingsData::mailboxId(void) const
+	?getStaticMetaObject@NmApiMessageManager@EmailClientApi@@SAABUQMetaObject@@XZ @ 241 NONAME ; struct QMetaObject const & EmailClientApi::NmApiMessageManager::getStaticMetaObject(void)
+	?staticMetaObject@NmApiMessageManager@EmailClientApi@@2UQMetaObject@@B @ 242 NONAME ; struct QMetaObject const EmailClientApi::NmApiMessageManager::staticMetaObject
+	?qt_metacall@NmApiMailboxSettings@EmailClientApi@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 243 NONAME ; int EmailClientApi::NmApiMailboxSettings::qt_metacall(enum QMetaObject::Call, int, void * *)
 
--- a/emailservices/nmclientapi/eabi/nmailclientapiu.def	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmclientapi/eabi/nmailclientapiu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -211,4 +211,61 @@
 	_ZTVN14EmailClientApi19NmApiMailboxListingE @ 210 NONAME
 	_ZTVN14EmailClientApi20NmApiEnvelopeListingE @ 211 NONAME
 	_ZTVN14EmailClientApi20NmApiMessageEnvelopeE @ 212 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager11qt_metacallEN11QMetaObject4CallEiPPv @ 213 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager11qt_metacastEPKc @ 214 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager11saveMessageERK12NmApiMessage @ 215 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager12copyMessagesE5QListIyEyy @ 216 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager12moveMessagesE5QListIyEyy @ 217 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager13messagesMovedEi @ 218 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager14deleteMessagesE5QListIyE @ 219 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager14messagesCopiedEi @ 220 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager15messagesCreatedEi @ 221 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager15messagesDeletedEi @ 222 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager16createAttachmentER17NmApiEmailMessageRK8QVariant @ 223 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager16removeAttachmentER17NmApiEmailMessagey @ 224 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager16staticMetaObjectE @ 225 NONAME DATA 16
+	_ZN14EmailClientApi19NmApiMessageManager18createDraftMessageEPK8QVariant @ 226 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager18createReplyMessageEPK8QVariantb @ 227 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager19getStaticMetaObjectEv @ 228 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager20createForwardMessageEPK8QVariant @ 229 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager4sendERK12NmApiMessage @ 230 NONAME
+	_ZN14EmailClientApi19NmApiMessageManager5fetchERK12NmApiMessage @ 231 NONAME
+	_ZN14EmailClientApi19NmApiMessageManagerC1EyP7QObject @ 232 NONAME
+	_ZN14EmailClientApi19NmApiMessageManagerC2EyP7QObject @ 233 NONAME
+	_ZN14EmailClientApi19NmApiMessageManagerD0Ev @ 234 NONAME
+	_ZN14EmailClientApi19NmApiMessageManagerD1Ev @ 235 NONAME
+	_ZN14EmailClientApi19NmApiMessageManagerD2Ev @ 236 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings11qt_metacallEN11QMetaObject4CallEiPPv @ 237 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings11qt_metacastEPKc @ 238 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings12loadSettingsEyRNS_24NmApiMailboxSettingsDataE @ 239 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings12saveSettingsERKNS_24NmApiMailboxSettingsDataE @ 240 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings13createMailboxERK7QStringRNS_24NmApiMailboxSettingsDataE @ 241 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings13deleteMailboxEy @ 242 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings14listMailboxIdsER5QListIyE @ 243 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings14mailboxDeletedEi @ 244 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings16staticMetaObjectE @ 245 NONAME DATA 16
+	_ZN14EmailClientApi20NmApiMailboxSettings19getStaticMetaObjectEv @ 246 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettings23populateDefaultSettingsERK7QStringRNS_24NmApiMailboxSettingsDataE @ 247 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettingsC1EP7QObject @ 248 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettingsC2EP7QObject @ 249 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettingsD0Ev @ 250 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettingsD1Ev @ 251 NONAME
+	_ZN14EmailClientApi20NmApiMailboxSettingsD2Ev @ 252 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsData12setMailboxIdEy @ 253 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsData13clearSettingsEv @ 254 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsData8setValueEiRK8QVariant @ 255 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsDataC1Ev @ 256 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsDataC2Ev @ 257 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsDataD1Ev @ 258 NONAME
+	_ZN14EmailClientApi24NmApiMailboxSettingsDataD2Ev @ 259 NONAME
+	_ZNK14EmailClientApi19NmApiMessageManager10metaObjectEv @ 260 NONAME
+	_ZNK14EmailClientApi20NmApiMailboxSettings10metaObjectEv @ 261 NONAME
+	_ZNK14EmailClientApi24NmApiMailboxSettingsData12listSettingsEv @ 262 NONAME
+	_ZNK14EmailClientApi24NmApiMailboxSettingsData12validateDataEv @ 263 NONAME
+	_ZNK14EmailClientApi24NmApiMailboxSettingsData8getValueEiR8QVariant @ 264 NONAME
+	_ZNK14EmailClientApi24NmApiMailboxSettingsData9mailboxIdEv @ 265 NONAME
+	_ZTIN14EmailClientApi19NmApiMessageManagerE @ 266 NONAME
+	_ZTIN14EmailClientApi20NmApiMailboxSettingsE @ 267 NONAME
+	_ZTVN14EmailClientApi19NmApiMessageManagerE @ 268 NONAME
+	_ZTVN14EmailClientApi20NmApiMailboxSettingsE @ 269 NONAME
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/inc/nmapimailboxsettings_p.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#ifndef NMAPIMAILBOXSETTINGS_P_H_
+#define NMAPIMAILBOXSETTINGS_P_H_
+
+#include <QObject>
+#include <qpointer.h>
+#include <nmapimailboxsettings.h>
+#include <nmoperation.h>
+
+class NmApiDataPluginFactory;
+class NmOperation;
+
+namespace EmailClientApi
+{
+class NmApiMailboxSettingsData;
+
+class NmApiMailboxSettingsPrivate : public QObject
+{
+    Q_OBJECT
+public:
+    NmApiMailboxSettingsPrivate(QObject *parent = 0);
+    ~NmApiMailboxSettingsPrivate();
+
+    bool listMailboxIds(QList<quint64> &idList);
+    bool loadSettings(quint64 mailboxId, NmApiMailboxSettingsData &data);
+    bool saveSettings(const NmApiMailboxSettingsData &data);
+    bool createMailbox(const QString &mailboxType, NmApiMailboxSettingsData &data);
+    bool deleteMailbox(quint64 mailboxId);
+    bool populateDefaultSettings(const QString &mailboxType, NmApiMailboxSettingsData &data);
+
+signals:
+    void mailboxDeleted(int result = 0);
+    
+private:
+    void createPopImapMailbox(const QString &type, NmApiMailboxSettingsData &data);
+
+    
+private:
+    NmApiDataPluginFactory *mFactory;
+    QPointer<NmOperation> mDeleteMailboxOperation; // not owned
+};
+
+}
+
+#endif /* NMAPIMAILBOXSETTINGS_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/inc/nmapimailboxsettingsdata_p.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+#ifndef _NMAPI_MAILBOX_SETTINGS_DATA_PRIVATE_
+#define _NMAPI_MAILBOX_SETTINGS_DATA_PRIVATE_
+
+#include <QObject>
+#include <QScopedPointer>
+#include <QHash>
+
+namespace EmailClientApi
+{
+class NmApiMailboxSettingsDataPrivate
+{
+public:
+    NmApiMailboxSettingsDataPrivate();
+    virtual ~NmApiMailboxSettingsDataPrivate();
+    void setMailboxId(quint64 mailboxId);
+    quint64 mailboxId() const;
+    void setValue(int key, const QVariant &settingValue);
+    bool getValue(int key, QVariant &settingValue) const;
+    bool validateData() const;
+    QList<int> listSettings() const;
+	void clearSettings();
+    
+private:
+    bool validateString(int key, QVariant& val, bool& validated) const;
+    bool validateStringValue(int key, QString& val) const;
+    bool validateStringGeneral(int key, QString& val, bool& handled) const;
+    bool validateEmailAddress(int key, QString& val, bool& handled) const;
+    bool validateUsesAuthentication(int key, QString& val, bool& handled) const;
+    bool validateSecurityType(int key, QString& val, bool& handled) const;
+    bool validateAOLState(int key, QString& val, bool& handled) const;
+    bool validateInteger(int key, QVariant& val, bool& validated) const;
+    bool validateIntVal(int key, int val) const;
+    bool validateIntGeneral(int key, int val, bool& handled) const;
+    bool validateOnOffValue(int key, int val, bool& handled) const;
+    bool validateWeekdayMask(int key, int val, bool& handled) const;
+    bool validateHoursInDay(int key, int val, bool& handled) const;
+    bool validateBool(int key, QVariant& val, bool& validated) const;
+    bool validateDateTime(int key, QVariant& val, bool& validated) const;
+
+private:
+    quint64 mId;
+    QScopedPointer<QHash<int, QVariant> > mSettings;
+
+};
+}//end namespace
+
+#endif //_NMAPI_MAILBOX_SETTINGS_DATA_PRIVATE_
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/inc/nmapimessagemanager_p.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *     Email message related operations
+ */
+
+#ifndef NMAPIMESSAGEMANAGER_P_H_
+#define NMAPIMESSAGEMANAGER_P_H_
+
+#include <QObject>
+#include <nmapimessagemanager.h>
+#include <nmapifolder.h>
+#include <NmApiDataPluginFactory.h>
+#include <nmcommon.h>
+#include <nmapifolder.h>
+#include <nmapiprivateclasses.h>
+
+
+class NmApiEmailMessage;
+
+namespace EmailClientApi
+{
+
+class NmApiMessageManagerPrivate : public QObject
+{
+ Q_OBJECT  
+public:
+    NmApiMessageManagerPrivate(quint64 mailboxId,QObject *parent = 0);
+    virtual ~NmApiMessageManagerPrivate();
+    
+private:
+    enum EState {
+        EIdle = 0,
+        ECopyPending,
+        EMovePending,
+        EDeletePending        
+    };
+    
+public slots: 
+    bool moveMessages(const QList<quint64> messageIds,
+                    quint64 sourceFolderId,
+                    quint64 targetFolderId);
+
+    bool copyMessages(const QList<quint64> messageIds, 
+                   quint64 sourceFolder,
+                   quint64 targetFolder);
+    
+	void messageEventHandler(NmMessageEvent event,
+								const NmId &folder,
+								const QList<NmId> &messages,
+								const NmId &mailBox);
+								
+signals:
+	void messagesCopied(int result);
+	void messagesCreated(int result);
+	void messagesMoved(int result);
+	void messagesDeleted(int result);
+
+
+private:    
+    NmApiMessageManagerPrivate::EState mState;
+    QList<quint64> mMessages;
+    NmId mTarget;
+    NmId mMailboxId; 
+    NmApiDataPluginFactory *mFactory;
+    QObject *mPlugin;
+};
+
+}
+
+#endif /*NMAPIMESSAGEMANAGER_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/inc/nmapipopimapsettingsmanager.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef NMAPIPOPIMAPSETTINGSMANAGER_H
+#define NMAPIPOPIMAPSETTINGSMANAGER_H
+
+#include <nmapimailboxsettingsdata.h>
+
+namespace EmailClientApi {
+
+class NmApiPopImapSettingsManager 
+{
+public:       
+    NmApiPopImapSettingsManager();
+    virtual ~NmApiPopImapSettingsManager();
+    bool populateDefaults(const QString &mailboxType, NmApiMailboxSettingsData &data);
+
+private:
+    void populateImapDefs(NmApiMailboxSettingsData &data);
+    void populatePopDefs(NmApiMailboxSettingsData &data);
+    
+};
+}//namespace
+
+#endif // NMAPIPOPIMAPSETTINGSMANAGER_H
--- a/emailservices/nmclientapi/nmclientapi.pro	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmclientapi/nmclientapi.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -44,7 +44,9 @@
              nmapidatapluginfactory.h \
              nmapiengine.h \
              nmmessagepart.h  \
-             nmapicommon.h
+             nmapicommon.h \
+			 nmapimessagemanager.h \
+			 nmoperation.h
              
 #headers  and sources from api             
 SOURCES   += nmapitypesconverter.cpp \
@@ -52,8 +54,6 @@
              nmapiemailservice.cpp \
              nmapiengine.cpp 
 
-
-
 HEADERS   += nmapicommonheader.h \
              nmapiemailservice.h \
              nmapimessagetask.h \
@@ -63,18 +63,24 @@
              nmapifolderlisting.h \
              nmapienvelopelisting_p.h \
              nmapienvelopelisting.h \
-	     nmapiemailaddress_p.h \
-	     nmapiemailaddress.h \
-	     nmapieventnotifier_p.h \
-	     nmapieventnotifier.h \
-	     nmapifolder_p.h \
-	     nmapifolder.h \
-	     nmapimailbox_p.h \
-	     nmapimailbox.h \
-	     nmapimessagebody_p.h \
-	     nmapimessagebody.h \
-	     nmapimessageenvelope_p.h \
-	     nmapimessageenvelope.h
+             nmapiemailaddress_p.h \
+             nmapiemailaddress.h \
+             nmapieventnotifier_p.h \
+             nmapieventnotifier.h \
+             nmapifolder_p.h \
+             nmapifolder.h \
+             nmapimailbox_p.h \
+             nmapimailbox.h \
+             nmapimessagebody_p.h \
+             nmapimessagebody.h \
+             nmapimessageenvelope_p.h \
+             nmapimessageenvelope.h \
+             nmapimailboxsettingsdata_p.h \
+             nmapimailboxsettingsdata.h \
+             ../inc/nmapimailboxsettings_p.h \
+             ../../email_plat/nmail_settings_api/nmapimailboxsettings.h \
+             ../inc/nmapipopimapsettingsmanager.h \
+	     	 ../inc/nmapimessagemanager_p.h
 			 
 LIBS += -leuser
 LIBS += -llibc			
@@ -87,17 +93,24 @@
              nmapifolderlisting.cpp \
              nmapienvelopelisting_p.cpp \
              nmapienvelopelisting.cpp \ 
-	     nmapiemailaddress.cpp \
-	     nmapieventnotifier_p.cpp \
-	     nmapieventnotifier.cpp \
-	     nmapifolder.cpp \
-	     nmapimailbox.cpp \
-	     nmapimessagebody.cpp \
-	     nmapimessageenvelope.cpp
+             nmapiemailaddress.cpp \
+             nmapieventnotifier_p.cpp \
+             nmapieventnotifier.cpp \
+             nmapifolder.cpp \
+             nmapimailbox.cpp \
+             nmapimessagebody.cpp \
+             nmapimessageenvelope.cpp \
+             nmapimailboxsettingsdata_p.cpp \
+             nmapimailboxsettingsdata.cpp \
+             ../src/nmapimailboxsettings_p.cpp \
+             ../src/nmapimailboxsettings.cpp \
+             nmapipopimapsettingsmanager.cpp \
+	         ../src/nmapimessagemanager_p.cpp \
+			 ../src/nmapimessagemanager.cpp
 
 
-             
-             
+
+
 
 symbian*: { 
     TARGET.EPOCALLOWDLLDATA = 1
@@ -107,8 +120,14 @@
     TARGET.UID3 = 0x2002C366
     
     INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+    DEPENDPATH += $$APP_LAYER_SYSTEMINCLUDE
+
 	
-	 LIBS += -lnmailbase
+	 LIBS += -lnmailbase \
+	 -limcm \
+	 -lxqsettingsmanager \
+	 -lxqutils \
+	 -lnmailuiengine
 				   
     defBlock = \      
       "$${LITERAL_HASH}if defined(MARM)" \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimailboxsettings.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+#include <nmapimailboxsettings.h>
+#include "nmapimailboxsettings_p.h"
+#include <nmapimailboxsettingsdata.h>
+
+namespace EmailClientApi {
+
+
+NmApiMailboxSettings::NmApiMailboxSettings(QObject *parent)
+   :QObject(parent)
+{
+   d = new NmApiMailboxSettingsPrivate(this); 
+   connect(d, SIGNAL(mailboxDeleted(int)),this,SIGNAL(mailboxDeleted(int)));
+}
+
+NmApiMailboxSettings::~NmApiMailboxSettings()
+{
+    delete d;
+}
+
+/*!
+ \fn listMailboxIds
+ \param idList - QList consists of ids as quint64.
+ \return true is successful, otherwise return false
+
+ Lists ids of mailboxes
+ */
+bool NmApiMailboxSettings::listMailboxIds(QList<quint64> &idList)
+{
+    return d->listMailboxIds(idList);
+}
+
+bool NmApiMailboxSettings::loadSettings(quint64 mailboxId, NmApiMailboxSettingsData &data)
+{
+	return d->loadSettings(mailboxId, data);
+}
+
+bool NmApiMailboxSettings::saveSettings(const NmApiMailboxSettingsData &data)
+{
+	return d->saveSettings(data);
+}
+
+/*!
+ \fn createMailbox
+ \param mailboxType - mailbox type as QString
+ \param data - mailbox settings data
+
+ Creates a mailbox
+ */
+bool NmApiMailboxSettings::createMailbox(const QString &mailboxType, NmApiMailboxSettingsData &data)
+{
+    return d->createMailbox(mailboxType, data);
+}
+
+/*!
+ \fn deleteMailbox
+ \param mailboxId - mailbox id.
+ \return quint64 - the mailbox id.
+ 
+ Deletes mailbox with specific id.
+ */
+bool NmApiMailboxSettings::deleteMailbox(quint64 mailboxId)
+{
+    return d->deleteMailbox(mailboxId);
+}
+
+/*!
+ \fn populateDefaultSettings
+ \param mailboxType - mailbox type as QString
+ \param data - mailbox settings data, on return contains dafault settings for mailbox protocol
+ \return true if default settings are set, otherwise false
+ 
+ Populates NmApiMailboxSettingsData with protocol specific settings data.
+ */
+bool NmApiMailboxSettings::populateDefaultSettings(const QString &mailboxType, NmApiMailboxSettingsData &data)
+{
+    return d->populateDefaultSettings(mailboxType, data);
+}
+
+}//end namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimailboxsettings_p.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include "nmapimailboxsettings_p.h"
+
+#include "nmdataplugininterface.h"
+#include "nmapidatapluginfactory.h"
+//#include "nmapipopimapsettingsmanager.h"
+#include "emailtrace.h"
+
+#include <nmapimailboxsettings.h>
+#include <nmapimailboxsettingsdata.h>
+
+#include <QVariant>
+#include <QString>
+#include <QHash>
+#include <QList>
+
+namespace EmailClientApi
+{
+NmApiMailboxSettingsPrivate::NmApiMailboxSettingsPrivate(QObject *parent) : 
+    QObject(parent), 
+    mFactory(NULL),
+    mDeleteMailboxOperation(NULL)
+{
+    NM_FUNCTION;
+    mFactory = NmApiDataPluginFactory::instance();
+    Q_CHECK_PTR(mFactory);
+}
+
+NmApiMailboxSettingsPrivate::~NmApiMailboxSettingsPrivate()
+{
+    NM_FUNCTION;
+    NmApiDataPluginFactory::releaseInstance(mFactory);
+    if(mDeleteMailboxOperation && mDeleteMailboxOperation->isRunning()) {
+        mDeleteMailboxOperation->cancelOperation();        
+    }
+}
+
+bool NmApiMailboxSettingsPrivate::listMailboxIds(QList<quint64> &idList)
+{
+    NM_FUNCTION; 
+    QList<NmId> mailboxIds;
+    bool ret = false;
+    idList.clear();
+    
+    NmDataPluginInterface *instance = mFactory->interfaceInstance();
+    if (instance) {
+        if (instance->listMailboxIds(mailboxIds) == KErrNone) {
+            
+            foreach (NmId boxId, mailboxIds) {
+                        idList.append(boxId.id());
+                    }
+            
+            ret = true;   
+            }
+        } 
+     
+    return ret;
+}
+
+bool NmApiMailboxSettingsPrivate::loadSettings(quint64 mailboxId, NmApiMailboxSettingsData &data)
+{
+    NM_FUNCTION;
+    Q_UNUSED(mailboxId);
+    Q_UNUSED(data);
+    return false;
+}
+
+bool NmApiMailboxSettingsPrivate::saveSettings(const NmApiMailboxSettingsData &data)
+{
+    NM_FUNCTION;
+    Q_UNUSED(data);
+    return false;
+}
+
+bool NmApiMailboxSettingsPrivate::createMailbox(
+    const QString &mailboxType,
+    NmApiMailboxSettingsData &data)
+{
+    NM_FUNCTION;
+    
+    bool ret = false;
+    
+    /*QT_TRY {
+        if (mailboxType==NmApiMailboxTypePop || mailboxType==NmApiMailboxTypeImap) {
+            QScopedPointer<NmApiPopImapSettingsManager> popImapManager(new NmApiPopImapSettingsManager());  
+            popImapManager->createMailbox(mailboxType, data);
+            ret = true;
+        }
+        else {
+            ret = false;
+        }
+        //TODO store cenrep stuff here
+    }
+    QT_CATCH(...){
+        ret = false;
+    }*/
+    
+    return ret;
+}
+
+bool NmApiMailboxSettingsPrivate::deleteMailbox(quint64 mailboxId)
+{
+    NM_FUNCTION;
+    bool ret = false;
+    NmDataPluginInterface *instance = mFactory->interfaceInstance();
+    if (instance) {
+        if (mDeleteMailboxOperation && mDeleteMailboxOperation->isRunning()) {
+            mDeleteMailboxOperation->cancelOperation();
+        }
+        mDeleteMailboxOperation = instance->deleteMailboxById(NmId(mailboxId));
+        
+        if (mDeleteMailboxOperation) {
+            ret = true;
+            connect(mDeleteMailboxOperation, 
+                    SIGNAL(operationCompleted(int)), 
+                    this, 
+                    SIGNAL(mailboxDeleted(int)));
+        }
+    }
+    return ret;
+}
+
+bool NmApiMailboxSettingsPrivate::populateDefaultSettings(
+    const QString &mailboxType, NmApiMailboxSettingsData &data) 
+{
+    NM_FUNCTION;
+    /*QScopedPointer<NmApiPopImapSettingsManager> popImapManager(new NmApiPopImapSettingsManager());  
+    return popImapManager->populateDefaults(mailboxType, data);*/
+    return true;
+}
+
+}// namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimailboxsettingsdata.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+#include <nmapimailboxsettingsdata.h>
+#include "NmApiMailboxSettingsData_p.h"
+
+namespace EmailClientApi
+{
+
+NmApiMailboxSettingsData::NmApiMailboxSettingsData()
+{
+    d = new NmApiMailboxSettingsDataPrivate();
+    Q_CHECK_PTR(d);
+}
+
+NmApiMailboxSettingsData::~NmApiMailboxSettingsData()
+{
+    delete d;
+}
+
+/*!
+ \fn setMailboxId 
+ \param mailboxId - valid mailbox id as quint64.
+ 
+ Sets the mailbox id               
+ */
+void NmApiMailboxSettingsData::setMailboxId(quint64 mailboxId)
+{
+    d->setMailboxId(mailboxId);
+}
+
+/*!
+ \fn mailboxId
+ \return quint64 - the mailbox id.
+ 
+ Gets the mailbox id.              
+ */
+quint64 NmApiMailboxSettingsData::mailboxId() const
+{
+    return d->mailboxId();
+}
+
+/*!
+ \fn setValue 
+ \param key - setting data to be set.
+ \param settingValue - Value to be set as QVariant.
+ 
+ Sets individual setting value.        
+ */
+void NmApiMailboxSettingsData::setValue(int key, const QVariant &settingValue)
+{
+    d->setValue(key, settingValue);
+}
+
+/*!
+ \fn getValue
+ \param key - setting data to get.
+ \param settingValue - On return holds as QVariant.
+ \return true if successfull, false otherwise.
+ 
+ Get individual setting value.        
+ */
+bool NmApiMailboxSettingsData::getValue(int key, QVariant &settingValue) const
+{
+    return d->getValue(key, settingValue);
+}
+
+/*!
+ \fn validateData
+ \return boolean - true, everything validated OK, false otherwise
+ 
+ Validates data in this container. 
+ */
+bool NmApiMailboxSettingsData::validateData() const
+{
+    return d->validateData();
+}
+
+/*!
+ \fn listSettings
+ \return QList<int> - ,on return contains use key values for settingsdata
+ 
+ Validates data in this container. 
+ */
+QList<int> NmApiMailboxSettingsData::listSettings() const
+{
+	return d->listSettings();
+}
+
+/*!
+ \fn clearSettings 
+ 
+ Resets data in this container.
+ */
+void NmApiMailboxSettingsData::clearSettings()
+{
+	d->clearSettings();
+}
+
+}//end namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimailboxsettingsdata_p.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,761 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include "nmapimailboxsettingsdata_p.h"
+
+#include <nmapimailboxsettingsdata.h>
+#include <QObject>
+#include <QVariant>
+#include <QString>
+#include <QHash>
+#include "emailtrace.h"
+
+namespace EmailClientApi
+{
+
+NmApiMailboxSettingsDataPrivate::NmApiMailboxSettingsDataPrivate() :
+    mId(0), mSettings(new QHash<int, QVariant>())
+{
+    NM_FUNCTION;
+    Q_CHECK_PTR( mSettings );
+}
+
+NmApiMailboxSettingsDataPrivate::~NmApiMailboxSettingsDataPrivate()
+{
+    NM_FUNCTION;
+}
+
+/*!
+ \fn setMailboxId 
+ \param mailboxId - valid mailbox id as quint64.
+ 
+ Sets the mailbox id               
+ */
+void NmApiMailboxSettingsDataPrivate::setMailboxId(quint64 mailboxId)
+{
+    NM_FUNCTION;
+    mId = mailboxId;
+}
+
+/*!
+ \fn mailboxId
+ \return quint64 - the mailbox id.
+ 
+ Gets the mailbox id.              
+ */
+quint64 NmApiMailboxSettingsDataPrivate::mailboxId() const
+{
+    NM_FUNCTION;
+    return mId;
+}
+
+/*!
+ \fn setValue 
+ \param key - setting data to be set.
+ \param settingValue - Value to be set as QVariant.
+
+ Sets individual setting value.        
+ */
+void NmApiMailboxSettingsDataPrivate::setValue(int key, const QVariant &settingValue)
+{
+    NM_FUNCTION;
+    (*mSettings)[key] = settingValue;
+}
+
+/*!
+ \fn getValue
+ \param key - setting data to get.
+ \param settingValue - On return holds as QVariant.
+ \return true if succesfull, false otherwise.
+ 
+ Get individual setting value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::getValue(int key, QVariant &settingValue) const
+{
+    NM_FUNCTION;
+    if (mSettings->contains(key)) {
+        settingValue = (*mSettings)[key];
+        return true;
+    }
+    return false;
+}
+
+/*!
+ \fn validateString
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - if this key was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateString(int key, QVariant& val, bool& validated) const
+{
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) {     
+     case OutgoingPassword:
+     case IncomingPassword:     
+     case FolderPath: 
+     case IncomingLoginName:
+     case MailboxName:
+     case MyName:
+     case ReceptionActiveProfile:
+     case IncomingMailServer:
+     case OutgoingMailServer:
+     case OutgoingLoginName:
+     case EmailAddress:
+     case ReplyAddress:
+     case EmailAlias:               
+     case IncomingMailUsesAuthentication:
+     case OutgoingMailUsesAuthentication:
+     case IncomingMailSecurityType:
+     case OutgoingMailSecurityType:
+     case EmailNotificationState:         
+     case AlwaysOnlineState:{
+         validated=true;
+         if (val.type() != QVariant::String) {
+             ret = false;
+             break;
+         }
+
+         QString sz = val.toString();                   
+         ret = validateStringValue(key, sz);
+         break;
+     }
+         
+     default: {
+         validated = false;
+         ret = false;
+         break;
+         }
+    }    
+    return ret;
+}
+
+/*!
+ \fn validateStringValue
+ \param key - setting data to validate.
+ \param val - value to validate. 
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateStringValue(int key, QString& val) const
+{
+    NM_FUNCTION;
+    int ret = true;
+    bool valid = true, validated = false;
+    
+    valid = validateStringGeneral(key ,val, validated);
+    if (validated && !valid) {
+            ret = false;
+    }
+    
+    if( !validated ) {
+        valid = validateEmailAddress(key ,val, validated);
+        if (validated && !valid) {
+            ret = false;
+        }
+    }
+    
+    if( !validated ) {
+        valid = validateUsesAuthentication(key ,val, validated);
+        if (validated && !valid) {
+            ret = false;
+        }
+    }
+    
+    if( !validated ) {
+        valid = validateSecurityType(key ,val, validated);
+        if (validated && !valid) {
+            ret = false;
+        }
+    }
+    
+    if( !validated ) {
+        valid = validateAOLState(key ,val, validated);
+        if (validated && !valid) {
+            ret = false;
+        }
+    }        
+    return ret;
+}
+
+/*!
+ \fn validateStringGeneral
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param handled - true if method value was handled by method.
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateStringGeneral(int key, QString& /*val*/, bool& handled) const
+{
+    NM_FUNCTION;
+    int ret = true;
+    switch (key) {     
+         case OutgoingPassword:
+         case IncomingPassword:     
+         case FolderPath:
+         case IncomingLoginName:
+         case MailboxName:
+         case MyName:
+         case ReceptionActiveProfile:
+         case IncomingMailServer:
+         case OutgoingMailServer:
+         case OutgoingLoginName: {
+             // Allready validated that values are string, 
+             // otherwise method is not called
+             handled = true;         
+             break;
+         }
+         default: {
+             handled = false;
+             ret = false;
+             break;
+         }    
+    } 
+    return ret;
+}
+         
+/*!
+ \fn validateEmailAddress
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param handled - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateEmailAddress(int key, QString& val, bool& handled) const
+{
+    NM_FUNCTION;
+    int ret = true;
+    switch (key) {        
+        case EmailAddress:
+        case ReplyAddress: {
+            handled = true;
+            if (val.size() == 0) {             
+                 ret = false;
+                 break;
+            }
+            if (!(val.contains("@"))) {
+               ret = false;
+            }
+            break;
+        }
+        case EmailAlias:  {
+            handled = true;            
+            break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+     
+/*!
+ \fn validateUsesAuthentication
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param handled - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateUsesAuthentication(int key, QString& val, bool& handled) const
+{ 
+    NM_FUNCTION;
+    int ret = true;
+    switch (key) { 
+        case IncomingMailUsesAuthentication:
+        case OutgoingMailUsesAuthentication: {
+            handled = true;
+            if (val.size() == 0) {
+                ret = false;
+                break;
+            }
+            if (!(val.contains("none") ||
+              val.contains("UserAuthentication") ||
+                  (key == OutgoingMailUsesAuthentication &&
+                   val.contains("SameAsIncoming")) )) {
+                ret = false;
+            }
+            break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+        
+/*!
+ \fn validateSecurityType
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateSecurityType(int key, QString& val, bool& handled) const
+{ 
+    NM_FUNCTION;
+    int ret = true;
+    switch (key) {
+         case IncomingMailSecurityType:
+         case OutgoingMailSecurityType: {
+            handled = true;
+            if (val.size() == 0) {
+                ret = false;
+                break;
+            }
+            if (!(val.contains("StartTls") || 
+                  val.contains("SSLTls") || 
+                  val.contains("none"))) {
+                ret = false;
+            }
+            break;
+         }
+         default: {
+             handled = false;
+             ret = false;
+             break;
+         }
+     }
+     return ret;
+}
+
+/*!
+ \fn validateAOLState
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual string type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateAOLState(int key, QString& val, bool& handled) const
+{ 
+    NM_FUNCTION;
+    int ret = true;
+    switch (key) {
+        case EmailNotificationState:         
+        case AlwaysOnlineState:{
+         handled = true;
+         if (val.size() == 0) {
+              ret = false;
+              break;
+          }
+          if (!( (val.contains("always") && key == AlwaysOnlineState) || 
+                 (val.contains("automatic") && key == EmailNotificationState) || 
+                  val.contains("homeOnly") || 
+                  val.contains("off"))) {
+              ret = false;
+          }
+          break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateInteger
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual integer type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateInteger(int key, QVariant& val, bool& validated) const
+{
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) { 
+        case DownloadPictures:
+        case MessageDivider:
+        case UserNameHidden:
+        case FirstEmnReceived:
+        case EmnReceivedNotSynced:
+        case AoLastUpdateFailed:
+        case AoUpdateSuccessfulWithCurSettings:
+        case ReceptionUserDefinedProfile:
+        case ReceptionInboxSyncWindow:
+        case ReceptionGenericSyncWindowInMessages:
+        case IncomingPort:
+        case OutgoingPort:
+        case ReceptionWeekDays:
+        case ReceptionDayStartTime:
+        case ReceptionDayEndTime:
+        case ReceptionRefreshPeriodDayTime:
+        case ReceptionRefreshPeriodOther: {
+            validated = true;
+            if (!(val.type() == QVariant::Int ||
+                  val.type() == QVariant::UInt ||
+                  val.type() == QVariant::LongLong  ||
+                  val.type() == QVariant::ULongLong ||
+                  val.type() == QVariant::Double)) {
+                ret = false;
+                break;
+            }            
+            int ival = val.toInt();
+            ret = validateIntVal(key,ival);
+            break;
+        }
+        default: {
+            validated = false;
+            ret = false;
+            break;
+        }
+     }
+     return ret;
+}
+
+/*!
+ \fn validateIntVal
+ \param key - setting data to validate.
+ \param val - value to validate. 
+ \return true if valid value, false otherwise.
+ 
+ validates individual integer type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateIntVal(int key, int val) const
+{
+    NM_FUNCTION;
+    int ret = true;
+    bool valid = true, validated = false;
+
+    valid = validateIntGeneral(key ,val, validated);
+    if (validated && !valid) {
+           ret = false;
+    }
+    
+    if( !validated ) {
+       valid = validateOnOffValue(key ,val, validated);
+       if (validated && !valid) {
+           ret = false;
+       }
+    }
+    
+    if( !validated ) {
+       valid = validateWeekdayMask(key ,val, validated);
+       if (validated && !valid) {
+           ret = false;
+       }
+    }
+    
+    if( !validated ) {
+       valid = validateHoursInDay(key ,val, validated);
+       if (validated && !valid) {
+           ret = false;
+       }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateOnOffValue
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual integer type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateOnOffValue(int key, int val, bool& handled) const
+{
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) {   
+        // Integer: 0=Off, 1=On    
+        case DownloadPictures:
+        case MessageDivider:
+        case UserNameHidden:
+        
+        // Integer: 0=false,1=true
+        case FirstEmnReceived:
+        case EmnReceivedNotSynced:
+        case AoLastUpdateFailed:
+        case AoUpdateSuccessfulWithCurSettings:
+        
+        // Integer: 0=Disabled, 1=Enabled
+        case ReceptionUserDefinedProfile: {
+            handled = true;
+            if (!(0 <= val && val <= 1)) {
+                ret = false;
+            }
+            break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateIntGeneral
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual integer type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateIntGeneral(int key, int /*val*/, bool& handled) const
+{ 
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) {         
+        // Integer: 5,15,60,240,0="When open mailbox"
+        case ReceptionRefreshPeriodDayTime:
+        case ReceptionRefreshPeriodOther:
+            
+        // Integer: 0=All messages
+        case ReceptionInboxSyncWindow:
+        case ReceptionGenericSyncWindowInMessages:
+            
+        // Integer
+        case IncomingPort:
+        case OutgoingPort: {
+            // Allready valid thate these are integers
+            handled = true;
+            break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateWeekDayMask
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual integer type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateWeekdayMask(int key, int val, bool& handled) const
+{
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) {
+        // Integer bitmask of weekdays: 0x01=Mon,0x02=Tue,0x04=Wed,0x08=Thu,0x10=Fri,0x20=Sat,0x40=Sun
+        case ReceptionWeekDays: {
+            handled = true;
+            int wkdmask = Mon | Tue | Wed | Thu | Fri | Sat | Sun;
+            if ((val & wkdmask) != val) {
+                ret = false;
+            }
+            break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateHoursInDay
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual integer type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateHoursInDay(int key, int val, bool& handled) const
+{ 
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) {
+        // Integer: 0-23
+        case ReceptionDayStartTime:
+        case ReceptionDayEndTime: {
+            handled = true;
+            if (!(0 <= val && val <= 23)) { 
+                ret = false;
+            }
+            break;
+        }
+        default: {
+            handled = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateBool
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual bool type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateBool(int key, QVariant& val, bool& validated) const
+{
+    NM_FUNCTION;
+    bool ret = true;
+    switch (key) {    
+        
+        // Boolean
+        case IncomingSecureSockets:
+        case IncomingSSLWrapper:
+        case UseOutgoingAuthentication:
+        case OutgoingSecureSockets:
+        case OutgoingSSLWrapper: {
+            validated = true;
+            if (val.type() != QVariant::Bool)
+                ret = false;
+            break;
+        }
+        default: {
+            validated = false;
+            ret = false;
+            break;
+        }
+    }
+    return ret;
+}
+
+/*!
+ \fn validateDateTime
+ \param key - setting data to validate.
+ \param val - value to validate.
+ \param validated - true if value was validated by the method
+ \return true if valid value, false otherwise.
+ 
+ validates individual QDateTime type value.        
+ */
+bool NmApiMailboxSettingsDataPrivate::validateDateTime(int key, QVariant& val, bool& validated) const
+{
+    NM_FUNCTION;
+    switch(key) {
+        case AoLastSuccessfulUpdate: {
+            if (val.type() != QVariant::DateTime) {
+                validated = true;
+                return false;
+            }
+            return true;
+        }
+        default: {
+            validated = false;
+            return false;
+        }
+    }
+}
+
+/*!
+ \fn validateData
+ \return boolean - true, everything validated OK, false otherwise
+ 
+ Validates data in this container. 
+ */   
+bool NmApiMailboxSettingsDataPrivate::validateData() const
+{
+    NM_FUNCTION;
+    QHash<int, QVariant>::const_iterator i = mSettings->constBegin();
+    while (i != mSettings->constEnd()) {
+        
+        bool validated = false;
+        bool valid = false;        
+        
+        int key = i.key();
+        QVariant val = i.value();
+        
+        ++i;
+        
+        valid = validateString(key ,val, validated);
+        if (validated) {
+            if (!valid){
+                return valid;
+            }
+            continue;
+        }
+        
+        valid = validateInteger(key ,val, validated);
+        if (validated) {
+            if (!valid){
+                return valid;
+            }
+            continue;
+        }
+         
+        valid = validateBool(key ,val, validated);
+        if (validated) {
+            if (!valid){
+                return valid;
+            }
+            continue;
+        } 
+         
+        valid = validateDateTime(key ,val, validated);
+        if (validated) {
+            if (!valid){
+                return valid;
+            }
+            continue;
+        }
+     }
+     return true;
+}
+
+QList<int> NmApiMailboxSettingsDataPrivate::listSettings() const
+{
+    NM_FUNCTION;
+    return mSettings->keys();
+}
+
+/*!
+ \fn clearSettings 
+ 
+ Resets data in this container. 
+ */
+void NmApiMailboxSettingsDataPrivate::clearSettings()
+{
+	mSettings->clear();
+}
+
+}//end namespace
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimessagemanager.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *     Email message related operations
+ */
+#include <nmapimessagemanager.h>
+#include <nmapifolder.h>
+#include <nmapiprivateclasses.h>
+#include "nmapimessagemanager_p.h"
+
+
+/*!
+    \class NmApiMessageManager
+    \brief A class for performing various operations on messages.
+ */
+ 
+ 
+namespace EmailClientApi
+{
+
+ NmApiMessageManager::NmApiMessageManager(quint64 mailboxId,QObject *parent)
+	:QObject(parent)
+{
+	d = new NmApiMessageManagerPrivate(mailboxId,this);	
+	connect(d, SIGNAL(messagesCopied(int)),this,SIGNAL(messagesCopied(int)));
+	connect(d, SIGNAL(messagesCreated(int)),this,SIGNAL(messagesCreated(int)));
+	connect(d, SIGNAL(messagesMoved(int)),this,SIGNAL(messagesMoved(int)));
+	connect(d, SIGNAL(messagesDeleted(int)),this,SIGNAL(messagesDeleted(int)));	
+}
+
+NmApiMessageManager::~NmApiMessageManager()
+{
+	delete d;
+}
+   
+
+    // creates a new email message
+    // signaled with draftMessageCreated(NmApiMessage *message,int result) 
+    //    * ownership transferred
+bool NmApiMessageManager::createDraftMessage(const QVariant *initData)
+{
+    NM_FUNCTION;
+    Q_UNUSED(initData);
+	return false;
+}
+    
+    // creates fw message
+    // signaled with forwardMessageCreated(NmApiMessage *message,int result) 
+    //    * ownership transferred
+ bool NmApiMessageManager::createForwardMessage(const QVariant *initData)
+ {
+    NM_FUNCTION;
+    Q_UNUSED(initData);
+	return false;
+ }
+    
+    // creates reply message
+    // signaled with replyMessageCreated(NmApiMessage *message,int result) 
+    //    * ownership transferred
+bool NmApiMessageManager::createReplyMessage(const QVariant *initData,
+													bool replyAll)
+{
+    NM_FUNCTION;
+    Q_UNUSED(initData);
+    Q_UNUSED(replyAll);
+	return false;
+}
+ 
+/*!
+ \fn moveMessages 
+ \param messageIds Id list of source messages.
+ \param sourceFolderId Id of the source folder.
+ \param targetFolderId Id of the target folder.
+ \return true if operation was successfully started.
+ 
+ Starts async move operation for given messages.  
+ Completion signalled with messagesMoved(int result).
+ */
+bool NmApiMessageManager::moveMessages(const QList<quint64> messageIds,
+									quint64 sourceFolderId,
+									quint64 targetFolderId)
+{    
+	return d->moveMessages(messageIds,sourceFolderId,targetFolderId);
+}
+
+/*!
+ \fn copyMessages 
+ \param messageIds Id list of source messages.
+ \param sourceFolder Id of the source folder.
+ \param targetFolder Id of the target folder.
+ \return true if operation was successfully started.
+ 
+ Starts async copy operation for given messages.  
+ Completion signalled with messagesCopied(int result).
+ */
+bool NmApiMessageManager::copyMessages(const QList<quint64> messageIds,								
+									quint64 sourceFolder,
+									quint64 targetFolder)
+{
+	return d->copyMessages(messageIds, sourceFolder, targetFolder);
+}
+    
+// signaled with messageSaved(quint64 messageId, int result)
+bool NmApiMessageManager::saveMessage(const NmApiMessage &message)
+{
+    Q_UNUSED(message);
+	return false;
+}
+    
+// deletes message
+// signaled with messagesDeleted(int result)
+bool NmApiMessageManager::deleteMessages(const QList<quint64> messageIds)
+{
+    Q_UNUSED(messageIds);
+	return false;
+}
+    
+    // starts fetching rest of message body from server
+    // signaled with messageFetched(quint64 messageId, int result)
+bool NmApiMessageManager::fetch(const NmApiMessage &message)
+{
+    Q_UNUSED(message);
+	return false;
+}
+    
+    // moves message to outbox. Actual sending time may be immediate or scheduled
+    // signaled with messageSent(quint64 messageId, int result)
+bool NmApiMessageManager::send(const NmApiMessage &message)
+{
+    Q_UNUSED(message);
+	return false;
+}
+
+// creates new attachment for a message. Currently attachment can be specified as file name (attachmentSpec is QString)
+// signaled with attachmentCreated(quint64 attachemntId)
+//  * 
+bool NmApiMessageManager::createAttachment(NmApiEmailMessage &message,
+										const QVariant &attachmenSpec)
+{
+    Q_UNUSED(message);
+    Q_UNUSED(attachmenSpec);
+    return false;
+}
+                                                      
+// removes attachment from a message
+// signaled with attachmentRemoved(int result)
+bool NmApiMessageManager::removeAttachment(NmApiEmailMessage &message,
+quint64 /*attachmentId*/)
+{    
+    Q_UNUSED(message);
+    return false;
+}
+ 
+} // namespace EmailClientApi
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimessagemanager_p.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *     Email message related operations
+ */
+
+#include <nmapimessagemanager.h>
+#include <nmapidatapluginfactory.h>
+#include <nmdataplugininterface.h>
+#include <nmapifolder.h>
+#include <nmcommon.h>
+#include "nmapimessagemanager_p.h"
+#include "emailtrace.h"
+
+namespace EmailClientApi
+{
+
+NmApiMessageManagerPrivate::NmApiMessageManagerPrivate(quint64 mailboxId,QObject *parent)
+: QObject(parent),
+  mState(NmApiMessageManagerPrivate::EIdle), mMailboxId(mailboxId)
+{
+    NM_FUNCTION;	
+	
+    mFactory = NmApiDataPluginFactory::instance();
+    mPlugin = mFactory->plugin();    
+    if(mPlugin) {
+        connect(mPlugin,
+                SIGNAL(messageEvent(NmMessageEvent,
+                                    const NmId&,
+                                    const QList<NmId>&,
+                                    const NmId&)),
+                this,
+                SLOT(messageEventHandler(NmMessageEvent,
+                                    const NmId&,
+                                    const QList<NmId>&,
+                                    const NmId&)));
+    }				
+    NmDataPluginInterface *interface = mFactory->interfaceInstance();
+    interface->subscribeMailboxEvents(mailboxId);
+	
+}
+
+NmApiMessageManagerPrivate::~NmApiMessageManagerPrivate()
+{
+    NM_FUNCTION;
+    NmDataPluginInterface *interface = mFactory->interfaceInstance();
+    interface->unsubscribeMailboxEvents(mMailboxId);
+    NmApiDataPluginFactory::releaseInstance(mFactory);
+}
+    
+/*!
+ \fn moveMessages 
+ \param messageIds Id list of source messages.
+ \param sourceFolderId Id of the source folder.
+ \param targetFolderId Id of the target folder.
+ \return true if operation was successfully started.
+ 
+ Starts async move operation for given messages.  
+ Completion signalled with messagesMoved(int result).
+ */
+bool NmApiMessageManagerPrivate::moveMessages(const QList<quint64> messageIds,
+											quint64 sourceFolder,
+											quint64 targetFolder)
+{
+    NM_FUNCTION;
+    Q_UNUSED(messageIds);
+    Q_UNUSED(sourceFolder);
+    Q_UNUSED(targetFolder);
+    return false;
+}
+    
+/*!
+ \fn copyMessages 
+ \param messageIds Id list of source messages.
+ \param sourceFolder Id of the source folder.
+ \param targetFolder Id of the target folder.
+ \return true if operation was successfully started.
+ 
+ Starts async copy operation for given messages.  
+ Completion signalled with messagesCopied(int result).
+ */
+bool NmApiMessageManagerPrivate::copyMessages(const QList<quint64> messageIds,
+                                            const quint64 sourceFolder,
+											const quint64 targetFolder)
+{
+    NM_FUNCTION;
+    bool ret = false;
+    NmId targetFolderNmId(targetFolder);
+	NmId sourceFolderNmId(sourceFolder);
+	mTarget = targetFolderNmId;
+	mMessages = messageIds;
+	
+	NmDataPluginInterface *interface = mFactory->interfaceInstance();
+	
+    if (interface) {
+        mState = NmApiMessageManagerPrivate::ECopyPending;
+        if (interface->copyMessages(mMailboxId,
+                                  messageIds,
+                                  sourceFolderNmId,
+                                  targetFolderNmId)==0) {			
+            ret = true;
+        }        
+    }
+	mState = NmApiMessageManagerPrivate::EIdle;
+	return ret;
+}
+  
+/*!
+ \fn messageEventHandler 
+ \param event Event type.
+ \param folder Folder id.
+ \param messages Id list of messages involved.
+ \param mailBox Id of mailbox.
+  
+ Handler for plugin originated messageEvent.
+ */
+void NmApiMessageManagerPrivate::messageEventHandler(NmMessageEvent event,
+												const NmId &folder,
+												const QList<NmId> &messages,
+												const NmId &mailBox)
+{	
+	if(mMailboxId == mailBox &&
+	   mTarget == folder) {	
+        switch(event)
+        {
+            case NmMessageCreated: {
+                if (mState==NmApiMessageManagerPrivate::ECopyPending) {
+                    if(messages.count()==mMessages.count()) {
+                        emit messagesCopied(0);
+                    }
+                    else {
+                        emit messagesCopied(-1);
+                    }
+                }
+                break;			
+            }
+            
+            case NmMessageChanged: {
+                break;		
+            }
+            
+            case NmMessageDeleted: {            
+                break;
+            }
+                
+            case NmMessageFound: {
+                break;
+            }
+            
+            default: {
+                break;
+            }
+        }
+        mState = NmApiMessageManagerPrivate::EIdle;
+	}
+}
+} //namespace
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapipopimapsettingsmanager.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "nmapipopimapsettingsmanager.h"
+
+#include <imapset.h>
+#include <pop3set.h>
+#include <iapprefs.h>
+#include <cemailaccounts.h>
+#include <xqconversions.h>
+
+
+static const int DefaultPopPort = 110;
+static const int DefaultImapPort = 993;
+
+using namespace EmailClientApi;
+    
+NmApiPopImapSettingsManager::NmApiPopImapSettingsManager()
+{    
+}
+
+NmApiPopImapSettingsManager::~NmApiPopImapSettingsManager()
+{   
+}
+
+bool NmApiPopImapSettingsManager::populateDefaults(const QString &mailboxType, NmApiMailboxSettingsData &data)
+{
+    bool ret = false;
+    
+    QT_TRY {
+        if (mailboxType==NmApiMailboxTypePop) {
+            populatePopDefs(data);
+            ret = true;
+        }
+        else if (mailboxType==NmApiMailboxTypeImap) {
+            populateImapDefs(data);
+            ret = true;
+        }
+        else {
+            ret = false;
+        }
+    }
+    QT_CATCH(...){
+        ret = false;
+    }
+    
+    return ret;
+}
+
+void NmApiPopImapSettingsManager::populateImapDefs(NmApiMailboxSettingsData &data)
+{
+    QScopedPointer<CImImap4Settings> imapSettings(new CImImap4Settings());
+    
+    QScopedPointer<CImIAPPreferences> iapPref;
+    QT_TRAP_THROWING(iapPref.reset(CImIAPPreferences::NewLC());
+            CleanupStack::Pop(iapPref.data()));  
+        
+    QScopedPointer<CEmailAccounts> mailAccounts;
+    QT_TRAP_THROWING(mailAccounts.reset(CEmailAccounts::NewL()));
+        
+    QT_TRAP_THROWING( mailAccounts->PopulateDefaultImapSettingsL(*imapSettings,*iapPref));
+    
+    data.setValue(IncomingLoginName, 
+                           XQConversions::s60Desc8ToQString(imapSettings->LoginName()));
+
+    data.setValue(IncomingPassword, 
+                           XQConversions::s60Desc8ToQString(imapSettings->Password()));
+       
+    data.setValue(IncomingMailServer, 
+                           XQConversions::s60DescToQString(imapSettings->ServerAddress()));
+         
+   if (imapSettings->Port()) {
+       data.setValue(IncomingPort, imapSettings->Port());
+       }
+   else {
+       data.setValue(IncomingPort, DefaultImapPort);
+   }
+   
+   data.setValue(OutgoingSecureSockets, imapSettings->SecureSockets());
+   data.setValue(OutgoingSSLWrapper, imapSettings->SSLWrapper());  
+}
+
+void NmApiPopImapSettingsManager::populatePopDefs(NmApiMailboxSettingsData &data)
+{
+    QScopedPointer<CImPop3Settings> popSettings(new CImPop3Settings());
+   
+    QScopedPointer<CImIAPPreferences> iapPref;
+    QT_TRAP_THROWING(iapPref.reset(CImIAPPreferences::NewLC());
+        CleanupStack::Pop(iapPref.data()));
+ 
+    QScopedPointer<CEmailAccounts> mailAccounts;
+    QT_TRAP_THROWING(mailAccounts.reset(CEmailAccounts::NewL()));
+    
+    QT_TRAP_THROWING( mailAccounts->PopulateDefaultPopSettingsL(*popSettings,*iapPref));
+    
+    data.setValue(IncomingLoginName, 
+                        XQConversions::s60Desc8ToQString(popSettings->LoginName()));
+   
+    data.setValue(IncomingPassword, 
+                        XQConversions::s60Desc8ToQString(popSettings->Password()));
+     
+    data.setValue(IncomingMailServer, 
+                        XQConversions::s60DescToQString(popSettings->ServerAddress()));
+    
+    if (popSettings->Port()) {
+        data.setValue(IncomingPort, popSettings->Port());
+        }
+    else {
+        data.setValue(IncomingPort, DefaultPopPort);
+    }
+    
+    data.setValue(OutgoingSecureSockets, popSettings->SecureSockets());
+    data.setValue(OutgoingSSLWrapper, popSettings->SSLWrapper());
+}
+
+
--- a/emailservices/nmregister/src/nmmailboxregisterinterface.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmregister/src/nmmailboxregisterinterface.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -19,7 +19,7 @@
 
 #include <qservicemanager.h>
 #include <qserviceinterfacedescriptor.h>
-#include <HbIcon>
+#include <hbicon.h>
 #include <HbApplication>
 #include <QTranslator>
 #include "nmicons.h"
@@ -33,6 +33,7 @@
 //not mandatory 
 const QString hsItemWidgetUri("widget:uri");
 const QString hsItemDescription("item:description");
+const QString hsItemLocDescription("item:locdescription");
 //for icon - not mandatory 
 const QString hsIconFileName("icon:filename");//to display specific icon from file 
 const QString hsIconName("icon:name");// HbIcon 
@@ -198,7 +199,7 @@
     map[hsitemLaunchUri] = formLaunchUri(accountId);
     map[hsitemPublisherId] = NmPublisherName;
     map[hsItemWidgetUri] = NmHsWidget;
-    map[hsItemDescription] = hbTrId("txt_mail_widget_dblist_preview_of_recent_mail");
+    map[hsItemLocDescription] = "loc://KNmRegisterLocFileName/txt_mail_widget_dblist_preview_of_recent_mail";
     map[hsIconFileName] = accountIconName;
     // to add widget params that are mapped to widgets properties
     map[NmHsWidgetParamAccountId] = QString::number(accountId);
--- a/emailservices/nmregister/translations/nmregister.ts	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailservices/nmregister/translations/nmregister.ts	Thu Jun 24 14:32:18 2010 +0300
@@ -3,23 +3,23 @@
 <TS version="3.0" sourcelanguage="en_GB">
 <context>
 <message numerus="no" id="txt_mail_widget_l_dblist_preview_of_recent_mail">
-    <comment>Custom layout ID parent (no children). Descriptive text of mail widget in application library, landscape</comment>        
+    <comment>Descriptive text of mail widget in application library, landscape</comment>        
     <source>Preview of recent mail</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_mail_widget_l_dblist_preview_of_recent_mail</extra-loc-layout_id>    
+    <extra-loc-layout_id>qtl_list_sec2_large_graphic</extra-loc-layout_id>    
     <extra-loc-viewid>Mail Widget_L07</extra-loc-viewid>
     <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
-    <extra-loc-feature>Mail Widget</extra-loc-feature>
+    <extra-loc-feature>Ma</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
 <message numerus="no" id="txt_mail_widget_dblist_preview_of_recent_mail">
-    <comment>Custom layout ID parent (no children). Descriptive text of mail widget in application library, portrait</comment>        
+    <comment>Descriptive text of mail widget in application library, portrait</comment>        
     <source>Preview of recent mail</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>txt_mail_widget_dblist_preview_of_recent_mail</extra-loc-layout_id>    
+    <extra-loc-layout_id>qtl_list_sec_large_graphic</extra-loc-layout_id>    
     <extra-loc-viewid>Mail Widget_P07</extra-loc-viewid>
     <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
-    <extra-loc-feature>Mail Widget</extra-loc-feature>
+    <extra-loc-feature>Ma</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
 </context>
--- a/emailuis/nmailcpplugin/inc/nmsettingsplugin.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailcpplugin/inc/nmsettingsplugin.h	Thu Jun 24 14:32:18 2010 +0300
@@ -18,17 +18,17 @@
 #ifndef NMSETTINGSPLUGIN_H
 #define NMSETTINGSPLUGIN_H
 
-#include <cppluginplatinterface.h>
+#include <cpplugininterface.h>
 #include <qobject.h>
 
 class CpSettingFormItemData;
 class CpItemDataHelper;
 class QTranslator;
 
-class NmSettingsPlugin : public QObject, public CpPluginPlatInterface
+class NmSettingsPlugin : public QObject, public CpPluginInterface
     {
     Q_OBJECT
-    Q_INTERFACES(CpPluginPlatInterface)
+    Q_INTERFACES(CpPluginInterface)
 
 public:
 
@@ -36,7 +36,7 @@
 
     virtual ~NmSettingsPlugin();
 
-    virtual CpSettingFormItemData *createSettingFormItemData(
+    virtual QList<CpSettingFormItemData*> createSettingFormItemData(
         CpItemDataHelper &itemDataHelper) const;
 
 private:
--- a/emailuis/nmailcpplugin/src/nmsettingsplugin.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailcpplugin/src/nmsettingsplugin.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -27,7 +27,7 @@
 
 /*!
     \class NmSettingsPlugin
-    \brief The class implements CpPluginPlatInterface which is an interface
+    \brief The class implements CpPluginInterface which is an interface
            for plug-ins that are displayed in the control panel application.
            The class works as an entry point for NMail settings.
 
@@ -67,19 +67,20 @@
     \param itemDataHelper Helper class that helps control panel plug-ins to
            connect slots to inner widgets of the setting items.
 
-    \return Instance of CpSettingFormItemData.
-            Caller is the owner of the returned instance.
+    \return List of CpSettingFormItemData items.
 */
-CpSettingFormItemData *NmSettingsPlugin::createSettingFormItemData(
+QList<CpSettingFormItemData*> NmSettingsPlugin::createSettingFormItemData(
     CpItemDataHelper &itemDataHelper) const
 {
     NM_FUNCTION;
     
     HbIcon icon("qtg_large_email");
+    QList<CpSettingFormItemData*> list;
 
-    return new NmSettingsViewFactory(itemDataHelper,
-        hbTrId("txt_mail_title_control_panel"), "",
-        icon);
+    CpSettingFormItemData* viewFactory = new NmSettingsViewFactory(itemDataHelper,
+        hbTrId("txt_mail_title_control_panel"), "", icon);
+    list.append(viewFactory);
+    return list;
 }
 
 Q_EXPORT_PLUGIN2(nmsettingsplugin, NmSettingsPlugin);
--- a/emailuis/nmailui/conf/nmeditorview.docml	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/conf/nmeditorview.docml	Thu Jun 24 14:32:18 2010 +0300
@@ -9,14 +9,14 @@
                             <widget name="editorToField" type="HbWidget">
                                 <widget name="editorToLabel" type="HbLabel">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="12.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="12.5un"/>
                                     <string locid="txt_mail_editor_to" name="plainText"/>
                                     <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
                                 </widget>
                                 <widget name="editorToEdit" plugin="nmailuiwidgetsplugin" type="NmRecipientLineEdit"/>
                                 <widget name="editorToButton" type="HbPushButton">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="9.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="9.5un"/>
                                 </widget>
                                 <layout orientation="Horizontal" spacing="var(hb-param-margin-gene-middle-horizontal)" type="linear">
                                     <contentsmargins bottom="0un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0un"/>
@@ -28,14 +28,14 @@
                             <widget name="editorCcField" type="HbWidget">
                                 <widget name="editorCcLabel" type="HbLabel">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="12.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="12.5un"/>
                                     <string locid="txt_mail_editor_cc" name="plainText"/>
                                     <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
                                 </widget>
                                 <widget name="editorCcEdit" plugin="nmailuiwidgetsplugin" type="NmRecipientLineEdit"/>
                                 <widget name="editorCcButton" type="HbPushButton">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="9.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="9.5un"/>
                                 </widget>
                                 <layout orientation="Horizontal" spacing="var(hb-param-margin-gene-middle-horizontal)" type="linear">
                                     <contentsmargins bottom="0un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0un"/>
@@ -47,14 +47,14 @@
                             <widget name="editorBccField" type="HbWidget">
                                 <widget name="editorBccLabel" type="HbLabel">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="12.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="12.5un"/>
                                     <string locid="txt_mail_editor_bcc" name="plainText"/>
                                     <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
                                 </widget>
                                 <widget name="editorBccEdit" plugin="nmailuiwidgetsplugin" type="NmRecipientLineEdit"/>
                                 <widget name="editorBccButton" type="HbPushButton">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="9.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="9.5un"/>
                                 </widget>
                                 <layout orientation="Horizontal" spacing="var(hb-param-margin-gene-middle-horizontal)" type="linear">
                                     <contentsmargins bottom="0un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0un"/>
@@ -66,7 +66,7 @@
                             <widget name="editorSubjectField" type="HbWidget">
                                 <widget name="editorSubjectLabel" type="HbLabel">
                                     <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-                                    <sizehint height="7.46un" type="FIXED" width="12.5un"/>
+                                    <sizehint height="7.5un" type="FIXED" width="12.5un"/>
                                     <string locid="txt_mail_editor_subject" name="plainText"/>
                                     <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
                                 </widget>
@@ -129,7 +129,7 @@
                         </layout>
                     </widget>
                     <real name="z" value="0"/>
-                    <sizepolicy horizontalPolicy="Expanding" horizontalStretch="0" verticalPolicy="Expanding" verticalStretch="0"/>
+                    <sizepolicy horizontalPolicy="Expanding" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
                     <sizehint height="88un" type="PREFERRED" width="54un"/>
                     <layout type="anchor">
                         <anchoritem dst="container" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
--- a/emailuis/nmailui/conf/nmmailboxlistview.docml	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/conf/nmmailboxlistview.docml	Thu Jun 24 14:32:18 2010 +0300
@@ -3,8 +3,6 @@
     <widget name="NmMailboxListView" type="HbView">
         <widget name="content" role="HbView:widget" type="HbWidget">
             <widget name="MailboxListWidget" type="HbListView">
-                <real name="z" value="0.0001"/>
-                <sizehint height="85.67164un" type="PREFERRED" width="53.73134un"/>
             </widget>
             <layout type="anchor">
                 <anchoritem dst="MailboxListWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
--- a/emailuis/nmailui/conf/nmmessagelistview.docml	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/conf/nmmessagelistview.docml	Thu Jun 24 14:32:18 2010 +0300
@@ -4,7 +4,6 @@
         <widget name="content" role="HbView:widget" type="HbWidget">
             <widget name="MessageTreeList" type="HbTreeView">
                 <real name="z" value="1"/>
-                <sizehint height="76.71642un" type="PREFERRED" width="53.73134un"/>
                 <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
             </widget>
             <widget name="MessageListNoMessages" type="HbLabel">
@@ -19,6 +18,7 @@
                 <sizepolicy horizontalPolicy="MinimumExpanding" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
                 <sizehint height="6un" type="PREFERRED" width="52un"/>
                 <bool name="collapsable" value="FALSE"/>
+                <bool name="enabled" value="FALSE"/>
             </widget>
             <widget name="syncIcon" type="HbLabel">
                 <enums name="alignment" value="AlignAbsolute|AlignLeft|AlignVCenter|AlignJustify|AlignHCenter|AlignLeading"/>
--- a/emailuis/nmailui/inc/nmaction.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmaction.h	Thu Jun 24 14:32:18 2010 +0300
@@ -40,7 +40,7 @@
     };
     
     inline NmAction(int priorityIndex);
-    inline void setPriorityIndex(int priorityIndex);
+    inline void setPriorityIndex(const int priorityIndex);
     inline int priorityIndex() const;
     inline void setAvailabilityCondition(NmAvailabilityCondition condition);
     inline NmAvailabilityCondition availabilityCondition() const;
--- a/emailuis/nmailui/inc/nmactionrequest.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmactionrequest.h	Thu Jun 24 14:32:18 2010 +0300
@@ -45,8 +45,6 @@
 	NmActionContextViewMessageSearchList,
 	NmActionContextViewViewer,
 	NmActionContextViewEditor
-    // Add more view id's when
-    // funtionality is added
 };
 
 /*!
@@ -58,9 +56,7 @@
 	NmActionContextDataNone=0,
 	NmActionContextDataMailbox,
 	NmActionContextDataFolder,
-	NmActionContextDataMessage,
-    //Add more context menu types
-    //when functionality is added
+	NmActionContextDataMessage
 };
 
 
@@ -77,7 +73,7 @@
 class NmActionRequest
 {
 public:
-    inline NmActionRequest(NmActionObserver* observer,
+    inline NmActionRequest(NmActionObserver *observer,
 		NmActionContextMenuType menuType=NmActionOptionsMenu,
 		NmActionContextView contextView=NmActionContextViewNone,
 		NmActionContextDataType contextDataType=NmActionContextDataNone,
@@ -95,7 +91,7 @@
     mMessageId(messageId),
     mRequestData(requestData){};
 
-    inline NmActionObserver* observer() const {return mObserver;}
+    inline NmActionObserver *observer() const {return mObserver;}
     inline NmActionContextMenuType menuType() const {return mMenuType;}
     inline NmActionContextView contextView() const {return mContextView;}
     inline NmActionContextDataType contextDataType() const {return mContextDataType;}
--- a/emailuis/nmailui/inc/nmapplication.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmapplication.h	Thu Jun 24 14:32:18 2010 +0300
@@ -44,7 +44,7 @@
 {
     Q_OBJECT
 public:
-    NmApplication(QObject *parent);
+    NmApplication(QObject *parent, quint32 accountId=0);
     ~NmApplication();
     void enterNmUiView(NmUiStartParam *startParam);
     HbMainWindow* mainWindow();
@@ -61,7 +61,7 @@
     void delayedExitApplication();
     void handleOperationCompleted(const NmOperationCompletionEvent &event);
     void viewReady();
-    void launchSettings(HbAction* action);
+    void launchSettings(HbAction *action);
     
 private:
     void createMainWindow();
@@ -69,10 +69,10 @@
     void resetViewStack();
 
 private:
-    HbMainWindow *mMainWindow;              // Not owned
+    HbMainWindow *mMainWindow;              // Owned
     QStack<NmBaseView*> *mViewStack;        // Owned
     NmUiViewId mActiveViewId;
-    NmUiEngine *mUiEngine;                  // Owned
+    NmUiEngine *mUiEngine;                  // Not owned, singleton instance
     HbAction *mBackAction;                  // Owned
     NmUiExtensionManager *mExtensionManager;// Owned
     NmSendServiceInterface *mSendServiceInterface;       // Owned
@@ -90,6 +90,7 @@
     bool mViewReady;
     NmId mLastOperationMailbox;
     HbMessageBox *mQueryDialog;             // Owned
+    bool mBackButtonPressed;
 };
 
 #endif // NMAPPLICATION_H
--- a/emailuis/nmailui/inc/nmattachmentmanager.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmattachmentmanager.h	Thu Jun 24 14:32:18 2010 +0300
@@ -59,7 +59,7 @@
     void changeProgress(int value);
     void completeAttachmentFetch(int result);
     void completeMessageFetch(int result);
-    
+
 private:
     NmUiEngine &mUiEngine;
     QPointer<NmOperation> mFetchOperation;      // Not owned
--- a/emailuis/nmailui/inc/nmattachmentpicker.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmattachmentpicker.h	Thu Jun 24 14:32:18 2010 +0300
@@ -31,7 +31,7 @@
     Q_OBJECT
 
 public:
-    NmAttachmentPicker(QObject* parent = 0);
+    NmAttachmentPicker(QObject *parent = 0);
     ~NmAttachmentPicker();
         
 public slots:
@@ -43,12 +43,12 @@
     void fetchCameraVideo();
 
 signals:
-    void attachmentsFetchOk(const QVariant& fileNames);
-    void attachmentsFetchError(int errorCode, const QString& errorMessage);
+    void attachmentsFetchOk(const QVariant &fileNames);
+    void attachmentsFetchError(int errorCode, const QString &errorMessage);
     
 private:   
-    void fetch(const QString& interface, const QString& operation, 
-        const QList<QVariant>* args = 0); 
+    void fetch(const QString &interface, const QString &operation, 
+                const QList<QVariant> *args = 0); 
     void fetchFromCamera(int mode);
     
 private:
--- a/emailuis/nmailui/inc/nmbaseview.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmbaseview.h	Thu Jun 24 14:32:18 2010 +0300
@@ -34,11 +34,11 @@
 {
 	Q_OBJECT
 public:
-    NmBaseView(NmUiStartParam* startParam,
+    NmBaseView(NmUiStartParam *startParam,
                NmApplication &application,
                QGraphicsItem *parent = 0);
     virtual ~NmBaseView();
-    virtual void reloadViewContents(NmUiStartParam* startParam) = 0;
+    virtual void reloadViewContents(NmUiStartParam *startParam) = 0;
     virtual NmUiViewId nmailViewId() const = 0;
     virtual void okToExitView();
     virtual void aboutToExitView();
--- a/emailuis/nmailui/inc/nmeditorcontent.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmeditorcontent.h	Thu Jun 24 14:32:18 2010 +0300
@@ -21,52 +21,59 @@
 #include <hbwidget.h>
 #include "nmuiviewids.h"
 
-enum MessageBodyType { PlainText, HTMLText };
-
 class HbAnchorLayout;
 class HbTextEdit;
 class HbDocumentLoader;
 class NmBaseViewScrollArea;
-class NmEditorView;
 class NmMessage;
 class NmMessageEnvelope;
 class NmEditorHeader;
 class NmEditorTextEdit;
 class QNetworkAccessManager;
+class NmApplication;
 
-class NmEditorContent : public HbWidget
+class NmEditorContent : public QObject
 {
 Q_OBJECT
 
 public:
-    NmEditorContent(QGraphicsItem *parent,
-                    NmEditorView *parentView,
+    NmEditorContent(QObject *parent,
                     HbDocumentLoader *documentLoader,
-                    QNetworkAccessManager &manager);
+                    QNetworkAccessManager &manager,
+                    NmApplication &application);
+
     virtual ~NmEditorContent();
 
     void setMessageData(const NmMessage &originalMessage,
-                        bool createReplyHeader = true);
+                        NmUiEditorStartMode &editorStartMode);
     NmEditorTextEdit* editor() const;
     NmEditorHeader* header() const;
 
 private:
     void createConnections();
+    void removeEmbeddedImages(QString &bodyContent);
 
 signals:
     void setPlainText(const QString&);
+
     void setHtml(const QString&);
 
 public slots:
     void setEditorContentHeight();
+    void setScrollPosition(int oldPos, int newPos);
+    void updateScrollPosition(const QPointF &newPosition);
+
+private:
+    enum MessageBodyType { NmPlainText, NmHTMLText };
 
 private:
-    NmEditorHeader *mHeaderWidget;   // Owned
-    NmEditorView *mParentView;       // Not owned
-    HbAnchorLayout *mEditorLayout;   // Not owned
+    NmEditorHeader *mHeaderWidget; // Not owned
     MessageBodyType mMessageBodyType;
     NmEditorTextEdit *mEditorWidget; // Not owned
-    NmBaseViewScrollArea *mBackgroundScrollArea;
+    NmBaseViewScrollArea *mScrollArea; // Not owned
+    HbWidget *mScrollAreaContents; // Not owned
+    QPointF mScrollPosition;
+    NmApplication &mApplication;
 };
 
 #endif /* NMEDITORCONTENT_H_ */
--- a/emailuis/nmailui/inc/nmeditorheader.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmeditorheader.h	Thu Jun 24 14:32:18 2010 +0300
@@ -20,15 +20,6 @@
 
 #include <hbwidget.h>
 #include "nmactionresponse.h"
-// Header widget fields
-enum
-{
-    EEditorToLine=0,
-    EEditorCcLine,
-    EEditorBccLine,
-    EEditorSubjectLine,
-    EEditorAttachmentLine
-};
 
 class HbGroupBox;
 class HbLabel;
@@ -37,20 +28,20 @@
 class NmRecipientLineEdit;
 class QGraphicsLinearLayout;
 class NmRecipientField;
-class NmAttachmentList;
+class NmAttachmentList; 
 
 class NmEditorHeader : public QObject
 {
 Q_OBJECT
 
 public:
-    NmEditorHeader(HbDocumentLoader *documentLoader);
+    NmEditorHeader(QObject *parent, HbDocumentLoader *documentLoader);
     virtual ~NmEditorHeader();
     qreal headerHeight() const;
-    NmHtmlLineEdit* subjectEdit() const;
-    NmRecipientLineEdit* toEdit() const;
-    NmRecipientLineEdit* ccEdit() const;
-    NmRecipientLineEdit* bccEdit() const;
+    NmHtmlLineEdit *subjectEdit() const;
+    NmRecipientLineEdit *toEdit() const;
+    NmRecipientLineEdit *ccEdit() const;
+    NmRecipientLineEdit *bccEdit() const;
     void setPriority(NmMessagePriority priority=NmMessagePriorityNormal);
     void setPriority(NmActionResponseCommand prio=NmActionResponseCommandNone);
     void addAttachment(const QString &fileName, const QString &fileSize, const NmId &nmid);
--- a/emailuis/nmailui/inc/nmeditorview.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmeditorview.h	Thu Jun 24 14:32:18 2010 +0300
@@ -25,7 +25,6 @@
 #include "nmactionresponse.h"
 #include "nmattachmentfetchobserver.h"
 
-class QGraphicsLinearLayout;
 class HbTextEdit;
 class HbDocumentLoader;
 class HbProgressDialog;
@@ -45,7 +44,7 @@
 class NmAttachmentPicker;
 class HbMessageBox;
 class NmAttachmentManager;
-
+class HbVkbHost;
 
 class NmEditorView : public NmBaseView,
                      public NmActionObserver,
@@ -54,9 +53,8 @@
     Q_OBJECT
 
 public:
-
     NmEditorView(NmApplication &application,
-                 NmUiStartParam* startParam,
+                 NmUiStartParam *startParam,
                  NmUiEngine &uiEngine,
                  NmAttachmentManager &attaManager,
                  QGraphicsItem *parent = 0);
@@ -64,39 +62,30 @@
 
 
 public:
-
     void reloadViewContents(NmUiStartParam* startParam);
     NmUiViewId nmailViewId() const;
     HbWidget* scrollAreaContents();
     void okToExitView();
     void aboutToExitView();
     void viewReady();
-
+    void handleActionCommand(NmActionResponse &menuResponse);
+    void progressChanged(int value);
+    void fetchCompleted(int result);
+    
 public slots:
-
     void orientationChanged(Qt::Orientation orientation);
     void createOptionsMenu();
     void setButtonsDimming(bool enabled);
     void attachmentLongPressed(NmId attachmentPartId, QPointF point);
     void invalidAddressQuery(HbAction* action);
     void okToExitQuery(HbAction* action);
-
-public: // From NmActionObserver
-
-    void handleActionCommand(NmActionResponse &menuResponse);
-
-public: // From NmAttachmentFetchObserver
-    void progressChanged(int value);
-    void fetchCompleted(int result);
-
+    void sendProgressDialogCancelled();
+    
 private slots:
-
     void messageCreated(int result);
-    void adjustViewDimensions();
     void oneAttachmentAdded(const QString &fileName,
                             const NmId &msgPartId,
                             int result);
-
     void allAttachmentsAdded(int result);
     void attachmentRemoved(int result);
     void removeAttachmentTriggered();
@@ -106,9 +95,10 @@
     void onAttachmentsFetchError(int errorCode, const QString& errorMessage);
     void switchCcBccFieldVisibility();
 	void fetchProgressDialogCancelled();
+	void vkbOpened();
+	void vkbClosed();
 
 private:
-
     void loadViewLayout();
     void setMailboxName();
     void fetchProgressDialogShow();
@@ -126,33 +116,25 @@
     QString addressListToString(const QList<NmAddress*> &list) const;
     QString addressListToString(const QList<NmAddress> &list) const;
     void enableToolBarAttach(bool enable);
-
-public slots:
-
-    void sendProgressDialogCancelled();
+    void showChrome(bool show);
 
 private: // Data
-
     NmApplication &mApplication;
     NmUiEngine &mUiEngine;
     NmAttachmentManager  &mAttaManager;
     HbDocumentLoader *mDocumentLoader;  // Owned
     QObjectList mWidgetList;            // Owned
-    NmBaseViewScrollArea *mScrollArea;  // Not owned
-    HbWidget *mScrollAreaContents;      // Not owned
     NmEditorTextEdit *mEditWidget;      // Not owned
     NmEditorHeader *mHeaderWidget;      // Not owned
     NmMessage *mMessage;                // Owned
-    QGraphicsLinearLayout *mLayout;
     NmEditorContent *mContentWidget;    // Owned
     HbMenu *mPrioritySubMenu;           // Owned
     HbMenu *mAttachmentListContextMenu; // Owned
     NmId mSelectedAttachment;
-
+    HbVkbHost *mVkbHost;                // Not owned
     QPointer<NmMessageCreationOperation> mMessageCreationOperation;  // Not owned
     QPointer<NmAddAttachmentsOperation> mAddAttachmentOperation;     // Not owned 
     QPointer<NmOperation> mRemoveAttachmentOperation;                // Not owned 
-
     HbProgressDialog *mWaitDialog;         // Owned.    
     HbMessageBox* mQueryDialog;            // Owned
     NmAttachmentPicker* mAttachmentPicker; // Owned    
--- a/emailuis/nmailui/inc/nmmailboxlistview.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmmailboxlistview.h	Thu Jun 24 14:32:18 2010 +0300
@@ -33,7 +33,7 @@
 class HbAbstractViewItem;
 class NmAction;
 
-class NmMailboxListView : public NmBaseView, public NmActionObserver
+class NmMailboxListView : public NmBaseView
 {
     Q_OBJECT
 public:
@@ -49,9 +49,6 @@
     NmUiViewId nmailViewId() const;
     void viewReady();
 
-public: // From NmActionObserver
-    void handleActionCommand(NmActionResponse &menuResponse);
-
 public slots:
     void itemActivated(const QModelIndex &index);
     void openSelectedMailBox();
--- a/emailuis/nmailui/inc/nmmailboxlistviewitem.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmmailboxlistviewitem.h	Thu Jun 24 14:32:18 2010 +0300
@@ -33,7 +33,6 @@
     HbListViewItem *createItem();
     void updateChildItems();
     bool canSetModelIndex(const QModelIndex &index);
-    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
 
 protected:
     void polishEvent();
--- a/emailuis/nmailui/inc/nmmessagelistview.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmmessagelistview.h	Thu Jun 24 14:32:18 2010 +0300
@@ -72,7 +72,6 @@
     void showNoMessagesText();
     void hideNoMessagesText();
     void handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId);
-    void handleConnectionEvent(NmConnectState connectState, const NmId &mailboxId);
     void folderSelected();
     
 private:
@@ -102,6 +101,7 @@
     NmId mSelectedFolderId;
     NmId mSelectedMailboxId;
     int mPreviousModelCount;
+    bool mIsFirstSyncInMessageList;
 };
 
 #endif /* NMMESSAGELISTVIEW_H_ */
--- a/emailuis/nmailui/inc/nmmessagelistviewitem.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmmessagelistviewitem.h	Thu Jun 24 14:32:18 2010 +0300
@@ -23,10 +23,6 @@
 class HbLabel;
 class HbTextItem;
 class HbFrameItem;
-class QStyleOptionGraphicsItem;
-class QGraphicsLayoutItem;
-class HbWidgetBase;
-class HbStyleOptionAbstractViewItem;
 class NmMessageListModel;
 class NmMessageListModelItem;
 class NmMessageEnvelope;
@@ -43,7 +39,6 @@
     void updateChildItems();
     HbTreeViewItem *createItem();
     bool canSetModelIndex(const QModelIndex &index) const;
-    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
     QRectF contiguousSelectionArea() const { return QRectF(); };
 
 private:
@@ -51,7 +46,7 @@
     void setContentsToMessageItem(const NmMessageEnvelope &envelope, bool dividersActive);
     void setFontsRead();
     void setFontsUnread();
-    void setFonts(const QColor &colorRole, HbFontSpec &spekki);
+    void setFonts(const QColor &colorRole, HbFontSpec &fontSpec);
     void getFontSizes();    
     QString senderFieldText(const NmMessageEnvelope &envelope);
 
--- a/emailuis/nmailui/inc/nmrecipientfield.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmrecipientfield.h	Thu Jun 24 14:32:18 2010 +0300
@@ -49,9 +49,7 @@
 
 public slots:
     void setText(const QString &text);
-#ifdef Q_OS_SYMBIAN
     void launchContactsPicker();
-#endif
 
 private:
     HbDocumentLoader &mDocumentLoader;
--- a/emailuis/nmailui/inc/nmsendserviceinterface.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmsendserviceinterface.h	Thu Jun 24 14:32:18 2010 +0300
@@ -23,11 +23,7 @@
 #include <QObject>
 #include <QVariant>
 
-#ifdef Q_OS_SYMBIAN
 #include <xqserviceprovider.h>
-#else
-#define NM_WINS_ENV
-#endif
 
 //  FORWARD DECLARATIONS
 class NmDataManager;
@@ -41,11 +37,7 @@
 
 
 class NmSendServiceInterface
-#ifndef NM_WINS_ENV
     : public XQServiceProvider
-#else
-    : public QObject
-#endif
 {
     Q_OBJECT
 
@@ -69,11 +61,11 @@
 
 private: // Data
 
-    NmApplication *mApplication; // Not owned
+    NmApplication *mApplication;    // Not owned
     NmUiEngine &mUiEngine;
     int mAsyncReqId;
-    NmUiStartParam *mStartParam;
-    NmMailboxSelectionDialog *mSelectionDialog;
+    NmUiStartParam *mStartParam;    // Owned
+    NmMailboxSelectionDialog *mSelectionDialog; // Owned
     HbView *mCurrentView;
 };
 
--- a/emailuis/nmailui/inc/nmuidocumentloader.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmuidocumentloader.h	Thu Jun 24 14:32:18 2010 +0300
@@ -28,9 +28,9 @@
 {
 public:
     NmUiDocumentLoader(const HbMainWindow *window);
-    virtual ~NmUiDocumentLoader();
+    ~NmUiDocumentLoader();
 protected:
-    virtual QObject *createObject(const QString& type, const QString &name);
+    QObject *createObject(const QString& type, const QString &name);
 
 };
 
--- a/emailuis/nmailui/inc/nmuiheaders.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmuiheaders.h	Thu Jun 24 14:32:18 2010 +0300
@@ -42,6 +42,7 @@
 #include <QNetworkDiskCache>
 #include <QWebSettings>
 #include <QPointer>
+#include <QTapGesture>
 #include <QPinchGesture>
 #include <QInputContext>
 
@@ -87,8 +88,10 @@
 #include <hbeffect.h>
 #include <hbmodeliterator.h>
 #include <hbscrollarea.h>
+#include <hbinputvkbhost.h>
+#include <hbindicator.h>
+#include <hbformatdialog.h>
 
-#ifdef Q_OS_SYMBIAN
 #include <cntservicescontact.h>
 #include <xqservicerequest.h>
 #include <qtcontacts.h>
@@ -97,7 +100,8 @@
 #include <xqappmgr.h>
 #include <xqserviceipcmarshal.h>
 #include <xqsharablefile.h>
-#endif
+#include <fmfiledialog.h>
+#include <xqaiwdecl.h>
 
 #include <nmcommon.h>
 
@@ -117,6 +121,9 @@
 #include <emailmailboxinfo.h>
 #include <email_services_api.h>
 
+// other
+#include <math.h>
+
 // nmailui
 #include "nmhtmllineedit.h"
 #include "nmaction.h"
--- a/emailuis/nmailui/inc/nmuriserviceinterface.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmuriserviceinterface.h	Thu Jun 24 14:32:18 2010 +0300
@@ -22,57 +22,39 @@
 //  INCLUDES
 #include <QObject>
 #include <QVariant>
-
-#ifdef Q_OS_SYMBIAN
 #include <xqserviceprovider.h>
-#else
-#define NM_WINS_ENV
-#endif
 
 //  FORWARD DECLARATIONS
-class NmDataManager;
-class NmMailboxListModel;
 class NmUiEngine;
 class NmApplication;
 class NmUiStartParam;
 class NmMailboxSelectionDialog;
 class NmId;
 class HbView;
-class NmAddress;
 
-class NmUriServiceInterface
-#ifndef NM_WINS_ENV
-    : public XQServiceProvider
-#else
-    : public QObject
-#endif
+class NmUriServiceInterface : public XQServiceProvider
 {
     Q_OBJECT
-
 public:
-
-    NmUriServiceInterface( QObject *parent,
-                           NmUiEngine &mailboxListModel,
-                           NmApplication* application);
+    NmUriServiceInterface(QObject *parent,
+                          NmUiEngine &uiEngine,
+                          NmApplication *application);
     virtual ~NmUriServiceInterface();
 
 public slots:
-
     bool view(const QString& uri);
     void selectionDialogClosed(NmId &mailboxId);
 
 private:
-
     void launchEditorView(NmId mailboxId);
     void cancelService();
 
 private: // Data
-
-    NmApplication *mApplication; // Not owned
+    NmApplication *mApplication;                // Not owned
     NmUiEngine &mUiEngine;
     int mAsyncReqId;
-    NmUiStartParam *mStartParam;
-    NmMailboxSelectionDialog *mSelectionDialog;
+    NmUiStartParam *mStartParam;                // Owned
+    NmMailboxSelectionDialog *mSelectionDialog; //Owned
     HbView *mCurrentView;
 };
 
--- a/emailuis/nmailui/inc/nmutilities.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmutilities.h	Thu Jun 24 14:32:18 2010 +0300
@@ -23,10 +23,7 @@
 class NmMessage;
 class NmMessageEnvelope;
 class NmAddress;
-class NmOperationCompletionEvent;
-class QFile;
 class XQSharableFile;
-class NmOperationCompletionEvent;
 class HbMessageBox;
 
 /*!
@@ -37,39 +34,28 @@
     Q_OBJECT
 public:
     enum NmAddressValidationType {
-        ValidAddress,
-        InvalidAddress,
-        Default
+        NmValidAddress,
+        NmInvalidAddress,
+        NmDefault
     };
-    
     static void getRecipientsFromMessage( const NmMessage &message, 
         QList<NmAddress> &recipients,
-        NmAddressValidationType type = Default );
-    
+        NmAddressValidationType type = NmDefault );
     static bool isValidEmailAddress( const QString &emailAddress );
-    
     static QString addressToDisplayName( const NmAddress &address );
-    
     static bool parseEmailAddress( const QString &emailAddress, NmAddress &address );
-    
     static QString cleanupDisplayName( const QString &displayName );     
-
-    static int openFile(XQSharableFile &file);
-    
+    static int openFile(XQSharableFile &file); 
     static QString truncate( const QString &string, int length );
-
     static QString attachmentSizeString(const int sizeInBytes);
-
     static void displayErrorNote(QString noteText); 
-
-    static HbMessageBox* displayQuestionNote(QString noteText,
-                                             QObject* receiver = 0,
-                                             const char* member = 0);
-    
-    static HbMessageBox* displayWarningNote(QString noteText,
-                                            QObject* receiver = 0,
-                                            const char* member = 0);
-
+    static HbMessageBox *displayQuestionNote(QString noteText,
+                                             QObject *receiver = 0,
+                                             const char *member = 0);
+   
+    static HbMessageBox *displayWarningNote(QString noteText,
+                                            QObject *receiver = 0,
+                                            const char *member = 0);
     static QString createReplyHeader(const NmMessageEnvelope &env);
 };
 
--- a/emailuis/nmailui/inc/nmviewerheader.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmviewerheader.h	Thu Jun 24 14:32:18 2010 +0300
@@ -11,7 +11,7 @@
 *
 * Contributors:
 *
-* Description:
+* Description: NMail viewer view header widget definition
 *
 */
 
@@ -54,7 +54,7 @@
     QString formatRecipientList(const QString &sender,
                                 const QList<NmAddress> &to,
                                 const QList<NmAddress> &cc);
-    QString addressToDisplayInHtml(const NmAddress &addr);
+    QString addressToDisplay(const NmAddress &addr);
     
 private:
     NmMessage *mMessage;                 // Not owned
--- a/emailuis/nmailui/inc/nmviewerserviceinterface.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmviewerserviceinterface.h	Thu Jun 24 14:32:18 2010 +0300
@@ -21,44 +21,27 @@
 
 //  INCLUDES
 #include <QObject>
-#ifdef Q_OS_SYMBIAN
 #include <xqserviceprovider.h>
-#else
-#define NM_WINS_ENV
-#include <QVariant>
-#endif
-
 
 //  FORWARD DECLARATIONS
-class HbView;
 class NmApplication;
 class NmUiEngine;
 class NmId;
 
-#ifndef NM_WINS_ENV
 class NmViewerServiceInterface : public XQServiceProvider
-#else
-class NmViewerServiceInterface : public QObject
-#endif
 {
     Q_OBJECT
-
 public:
-
     NmViewerServiceInterface(QObject *parent,
                               NmApplication *application,
                               NmUiEngine &uiEngine);
-
     ~NmViewerServiceInterface();
 
 
 public slots:
-
     void viewMessage(QVariant mailboxId, QVariant folderId, QVariant messageId);
 
-
 private:
-
     NmApplication *mApplication; // Not owned
     NmUiEngine &mUiEngine;
     int mAsyncReqId;
--- a/emailuis/nmailui/inc/nmviewerview.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmviewerview.h	Thu Jun 24 14:32:18 2010 +0300
@@ -105,8 +105,6 @@
     void createToolBar();
     void setAttachmentList();
     void createAndShowWaitDialog();
-    void setWebViewWidth(int width);
-    void setWebViewHeighth(int height);
 
 private:
     NmApplication &mApplication;
--- a/emailuis/nmailui/inc/nmviewerwebview.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/inc/nmviewerwebview.h	Thu Jun 24 14:32:18 2010 +0300
@@ -42,27 +42,24 @@
 {
     Q_OBJECT
 public:
-	NmMailViewerWK();
-	~NmMailViewerWK();
+    NmMailViewerWK();
+    ~NmMailViewerWK();
     virtual QVariant loadResource (int type, const QUrl &name, NmId &partId, bool &isFetched);
     void setParentView(NmViewerView *parentView);
     void addContent(QString key, QVariant val, NmId partId, bool isFetched);
-
+    virtual bool event(QEvent* event);
+    
+protected:
+    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent* event);
+    virtual void gestureEvent(QGestureEvent* event);
+    virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event);
+    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
+    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
+    
 private:
     QMap<QString,NmMailViewerWkContentItem> mContent;
     NmViewerView *mParentView;                        // Not owned
-};
-
-class NmEventFilterWK : public QObject
-{
-    Q_OBJECT
-public:
-    NmEventFilterWK(QObject* parent = 0);
-protected:
-    bool eventFilter(QObject* object, QEvent* event);
-    bool gestureEvent(QGestureEvent* event);
-private:
-    Q_DISABLE_COPY(NmEventFilterWK)
+    bool mSuppressRelease;
 };
 
 #endif /* NMVIEWERWEBVIEW_H_*/
--- a/emailuis/nmailui/nmailui.pro	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/nmailui.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -11,6 +11,7 @@
 CONFIG += debug
 CONFIG += hb
 CONFIG += service
+CONFIG += no_icon
 
 SERVICE.FILE = service_conf.xml
 
--- a/emailuis/nmailui/src/main.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/main.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -18,6 +18,9 @@
 
 #include "nmuiheaders.h"
 
+//parameter values
+const QString NmActivityName("EmailInboxView");
+
 /*!
 	int main
 */
@@ -29,22 +32,28 @@
  
     // Load the translation file.
     QTranslator translator;
-
-#ifdef Q_OS_SYMBIAN
     QString lang = QLocale::system().name();
     QString appName = "mail_";
     QString path = "Z:/resource/qt/translations/";
-#else
-    QString lang;
-    QString appName = "mail";
-    QString path = ":/translations";
-#endif
     translator.load(appName + lang, path);
     app.installTranslator(&translator);
 
     app.setApplicationName(hbTrId("txt_mail_title_mail"));
 
-    NmApplication *nmApplication = new NmApplication(&app);
+    NmApplication *nmApplication = NULL;
+    
+    quint32 accountId = 0;
+    if (app.activateReason() == Hb::ActivationReasonActivity && app.activateId() == NmActivityName)
+        {
+        QVariant data = app.activateParams().take("accountId");
+        QString accountIdString = data.toString();
+        accountId = accountIdString.toULongLong();
+        nmApplication = new NmApplication(&app,accountId);
+        }
+    else
+        {
+        nmApplication = new NmApplication(&app);
+        }
 
     int ret = app.exec();
     delete nmApplication;
--- a/emailuis/nmailui/src/nmapplication.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmapplication.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -16,12 +16,8 @@
 */
 
 #include "nmuiheaders.h"
-#ifdef Q_OS_SYMBIAN
 #include <email_services_api.h>
 #include <e32base.h>
-#else
-#define NM_WINS_ENV
-#endif
 
 static const QString NmSendServiceName = "nmail.com.nokia.symbian.IFileShare";
 
@@ -33,7 +29,7 @@
 /*!
     Constructor
 */
-NmApplication::NmApplication(QObject *parent)
+NmApplication::NmApplication(QObject *parent, quint32 accountId)
 :QObject(parent),
 mMainWindow(NULL),
 mViewStack(NULL),
@@ -48,17 +44,12 @@
 mAttaManager(NULL),
 mSettingsViewLauncher(NULL),
 mViewReady(false),
-mQueryDialog(NULL)
+mQueryDialog(NULL),
+mBackButtonPressed(false)
 {
     NM_FUNCTION;
 
-    // TEMPORARY WORKAROUND TO PREVENT PANIC User panic 66, where there is
-    // a PushL call to cleanup stack without any TRAP.
-#ifdef Q_OS_SYMBIAN
     TRAP_IGNORE(mUiEngine = NmUiEngine::instance());
-#else
-    mUiEngine = NmUiEngine::instance();
-#endif
 
     // Create network access manager and cache for application use.
     mNetManager = new NmViewerViewNetManager(*mUiEngine);
@@ -71,7 +62,6 @@
     // attachment manager can be shared between viewer and editor, ownership in application class
     mAttaManager = new NmAttachmentManager(*mUiEngine);
 
-#ifndef NM_WINS_ENV
     mSendServiceInterface =
             new NmSendServiceInterface(NmSendServiceName, NULL, *mUiEngine, this);
     mSendServiceInterface2 =
@@ -82,7 +72,12 @@
             new NmMailboxServiceInterface(NULL, *mUiEngine, this);
     mViewerServiceInterface =
             new NmViewerServiceInterface(NULL, this, *mUiEngine);
-#endif
+
+    if(accountId != 0) {
+        QVariant mailbox;
+        mailbox.setValue(mUiEngine->getPluginIdByMailboxId(accountId).id());
+        mMailboxServiceInterface->displayInboxByMailboxId(mailbox);
+    }
 
     mEffects = new NmUiEffects(*mMainWindow);
 }
@@ -94,18 +89,16 @@
 {
     NM_FUNCTION;
 
-    if (mQueryDialog){
+    if (mQueryDialog) {
         delete mQueryDialog;
         mQueryDialog=NULL;
     }
 
-#ifndef NM_WINS_ENV
 	delete mSendServiceInterface;
 	delete mSendServiceInterface2;
 	delete mUriServiceInterface;
 	delete mMailboxServiceInterface;
 	delete mViewerServiceInterface;
-#endif
 
 	resetViewStack();
     delete mViewStack;
@@ -114,12 +107,12 @@
     mUiEngine = NULL;
     delete mBackAction;
     delete mExtensionManager;
-    if (mNetManager){
-        if (mNetManager->cache()){
+    if (mNetManager) {
+        if (mNetManager->cache()) {
             mNetManager->cache()->clear();
         }
     delete mNetManager;
-    mNetManager=NULL;
+    mNetManager = NULL;
     }
     // Effects needs to be deleted before MainWindow.
     delete mEffects;
@@ -139,11 +132,7 @@
 {
     NM_FUNCTION;
 
-#ifndef NM_WINS_ENV
     bool service = XQServiceUtil::isService();
-#else
-    bool service = false;
-#endif
 
     // Register custom widget files
     HbStyleLoader::registerFilePath(":nmmessagelistviewitem.widgetml");
@@ -190,11 +179,17 @@
         enterNmUiView(startParam);
     }
 
-    // Start to filter main window events to get "end key" event in all possible situations. Using
-    // event() is not enough to catch the event as it is only called if the view widget has the
-    // focus. Note: if key capturing (xqkeycapture.h) is required it is probably best to implement
-    // an own QMainWindow class and do the capturing there, not in the views.
-    mMainWindow->installEventFilter(this);
+    if (mMainWindow) {
+        // Start to filter main window events to get "end key" event in all possible situations. Using
+        // event() is not enough to catch the event as it is only called if the view widget has the
+        // focus. Note: if key capturing (xqkeycapture.h) is required it is probably best to implement
+        // an own QMainWindow class and do the capturing there, not in the views.
+        mMainWindow->installEventFilter(this);
+    
+        // Optimize the custom paint functions. 
+        // Currently effects to NmViewerHeader::paint & NmAttachmentListWidget::paint
+        mMainWindow->setOptimizationFlag(QGraphicsView::DontSavePainterState);    
+    }
 }
 
 /*!
@@ -206,9 +201,9 @@
     NM_FUNCTION;
 
     mViewReady = true;
-    if (!mViewStack->isEmpty()) {
+    if (mViewStack && !mViewStack->isEmpty()) {
     	NmBaseView *currentView = mViewStack->top();
-        if (currentView){
+        if (currentView) {
             currentView->viewReady();
         }
     }
@@ -222,7 +217,7 @@
 {
     NM_FUNCTION;
 
-    bool consumed = false;
+    bool consumed(false);
 
     if (obj && obj == mMainWindow && event && event->type() == QEvent::KeyPress) {
         QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
@@ -247,7 +242,7 @@
 {
     NM_FUNCTION;
 
-    if (newView) {
+    if (newView && mViewStack) {
         NM_COMMENT("nmailui: view exists");
         newView->setNavigationAction(mBackAction);
 
@@ -272,13 +267,13 @@
 
         // Set toolbars orientation
         HbToolBar *tb = newView->toolBar();
-        if(tb){
+        if (tb) {
             tb->setOrientation(Qt::Horizontal);
         }
 
         // hide old view
         NM_COMMENT("nmailui: removeView");
-        if (hideView){
+        if (hideView) {
             mMainWindow->removeView(hideView);
         }
 
@@ -292,16 +287,25 @@
  */
 void NmApplication::prepareForPopView()
 {
-    if (mViewStack->size() > 0) {
+    if (mViewStack && mViewStack->size() > 0) {
         // Get view pointer
         NmBaseView *view = mViewStack->top();
-
-        // View will call/signal popView if exitting is ok.
-        view->okToExitView();
+        if (view){
+			NmUiViewId topViewId = view->nmailViewId();
+			
+			// We must know in popView, are we coming with back button from message view
+			// to prevent the send animation.
+			if (topViewId == NmUiViewMessageEditor) {
+				mBackButtonPressed = true;
+			}
+            
+            // View will call/signal popView if exitting is ok.
+            view->okToExitView();        
+        }
     }
     // If the view stack is now empty quit the app
     // This happens also when the app has been started as a service
-    else if (mViewStack->size() == 0) {
+    else if (mViewStack && mViewStack->size() == 0) {
         exitApplication();
     }
 }
@@ -312,70 +316,72 @@
 void NmApplication::popView()
 {
     NM_FUNCTION;
-
-    if (mViewStack->size() > 0) {
-        // Get view pointer
-        NmBaseView *view = mViewStack->top();
-
-        // ask view if it's ok to exit
-        NmUiViewId topViewId = view->nmailViewId();
-
-        // Prepare for send animation if returing from editor and message has been sent.
-        if (topViewId == NmUiViewMessageEditor && mUiEngine->isSendingMessage()) {
-            mEffects->prepareEffect(NmUiEffects::NmEditorSendMessageAnimation);
-        }
-        mViewStack->pop();
-        // Call custom exit function
-        view->aboutToExitView();
-        // Remove view from stack.
-        mMainWindow->removeView(view);
-
-        // if we were in editor and sent a message, pop viewer from stack first
-        // so we can go straight to mail list
-        if (!mViewStack->isEmpty() && topViewId == NmUiViewMessageEditor &&
-            mUiEngine->isSendingMessage() &&
-            mViewStack->top()->nmailViewId() == NmUiViewMessageViewer) {
-            NmBaseView *tmpView = mViewStack->pop();
-            mMainWindow->removeView(tmpView);
-            delete tmpView;
-            tmpView = NULL;
-        }
-
-        if (!mViewStack->isEmpty()) {
-            // Activate next view in stack
-            NmBaseView *showView = mViewStack->top();
-            mMainWindow->addView(showView);
-            mMainWindow->setCurrentView(showView);
-            // Store activated view id
-            mActiveViewId=showView->nmailViewId();
-            // Perform send animation if requested.
-            mEffects->startEffect(NmUiEffects::NmEditorSendMessageAnimation);
-        }
-
-        delete view;
-        view = NULL;
-
-#ifndef NM_WINS_ENV
-        // If view was started as service, move the app now
-        // to the background, unless it was started when the app
-        // was already in foreground..
-        if (mServiceViewId == topViewId) {
-            mServiceViewId = NmUiViewNone;
-            NM_COMMENT("Returned from service view");
-
-            // if started as embedded or while the app was in foreground,
-            // do not hide the app
-            if (!XQServiceUtil::isEmbedded() &&
-                !mForegroundService) {
-                XQServiceUtil::toBackground(true);
+    if (mViewStack && mViewStack->size() > 0) {
+        NmBaseView *view = mViewStack->top();    
+        if (view) {
+            // Get top view id
+            NmUiViewId topViewId = view->nmailViewId();
+    
+            // Prepare for send animation if returing from editor and message has been sent.
+            if (topViewId == NmUiViewMessageEditor && mUiEngine->isSendingMessage()) {
+				// If we are coming from message editor with back button
+				// do not prepare the send animation.
+				if (!mBackButtonPressed) {
+					mEffects->prepareEffect(NmUiEffects::NmEditorSendMessageAnimation);
+				}
+	        }
+            mBackButtonPressed = false;
+            mViewStack->pop();
+            // Call custom exit function
+            view->aboutToExitView();
+            // Remove view from stack.
+            mMainWindow->removeView(view);
+    
+            // if we were in editor and sent a message, pop viewer from stack first
+            // so we can go straight to mail list
+            if (!mViewStack->isEmpty() && topViewId == NmUiViewMessageEditor &&
+                mUiEngine->isSendingMessage() &&
+                mViewStack->top()->nmailViewId() == NmUiViewMessageViewer) {
+                NmBaseView *tmpView = mViewStack->pop();
+                mMainWindow->removeView(tmpView);
+                delete tmpView;
+                tmpView = NULL;
+            }
+    
+            if (!mViewStack->isEmpty()) {
+                // Activate next view in stack
+                NmBaseView *showView = mViewStack->top();
+                mMainWindow->addView(showView);
+                mMainWindow->setCurrentView(showView);
+                // Store activated view id
+                mActiveViewId=showView->nmailViewId();
+                // Perform send animation if requested.
+                mEffects->startEffect(NmUiEffects::NmEditorSendMessageAnimation);
+            }
+    
+            delete view;
+            view = NULL;
+    
+            // If view was started as service, move the app now
+            // to the background, unless it was started when the app
+            // was already in foreground..
+            if (mServiceViewId == topViewId) {
+                mServiceViewId = NmUiViewNone;
+                NM_COMMENT("Returned from service view");
+    
+                // if started as embedded or while the app was in foreground,
+                // do not hide the app
+                if (!XQServiceUtil::isEmbedded() &&
+                    !mForegroundService) {
+                    XQServiceUtil::toBackground(true);
+                }
             }
         }
-#endif
     }
 
     // If the view stack is now empty quit the app
     // This happens also when the app has been started as a service
-    if (mViewStack->size()==0) {
+    if (mViewStack && mViewStack->size() == 0) {
         exitApplication();
     }
 }
@@ -390,12 +396,12 @@
     if (mViewStack && !mViewStack->isEmpty()) {
 	    int viewCount = mViewStack->count();
         // Pop and destroy all views
-	    for (int i=0;i<viewCount;i++) {
+	    for (int i=0 ; i < viewCount ; i++) {
 		    NmBaseView *view = mViewStack->pop();
             mMainWindow->removeView(view);
             delete view;
         }
-	    mActiveViewId=NmUiViewNone;
+	    mActiveViewId = NmUiViewNone;
     }
 }
 
@@ -404,7 +410,7 @@
     If requested view is already open, it is requested to reload.
     Otherwise view object is created and pushed to view stack
 */
-void NmApplication::enterNmUiView(NmUiStartParam* startParam)
+void NmApplication::enterNmUiView(NmUiStartParam *startParam)
 {
     NM_FUNCTION;
 
@@ -422,11 +428,11 @@
 		    mForegroundService = true;
 
 		    // at least one view must remain in the stack
-			while (mViewStack->count()>1) {
+			while (mViewStack->count( )> 1) {
 			    NmUiViewId topId = mViewStack->top()->nmailViewId();
-			    if (topId!=NmUiViewMessageEditor &&
-			        topId!=NmUiViewMailboxList &&
-			        topId!=startParam->viewId()) {
+			    if (topId != NmUiViewMessageEditor &&
+			        topId != NmUiViewMailboxList &&
+			        topId != startParam->viewId()) {
 			        prepareForPopView();
 			    }
 			    else {
@@ -440,7 +446,7 @@
         // Check whether requested view is already active
         // and if so, ask it to reload contents with new start parameter data
         // Do not reuse the view if started as service to editor view (ShareUI)
-        if (mActiveViewId==startParam->viewId() &&
+        if (mActiveViewId == startParam->viewId() &&
         	(!startParam->service() || mActiveViewId!=NmUiViewMessageEditor)) {
             mViewStack->top()->reloadViewContents(startParam);
         }
@@ -499,7 +505,7 @@
                 default:
                     // Reset view stack and exit application
                     delete startParam;
-                    startParam=NULL;
+                    startParam = NULL;
                     resetViewStack();
                     break;
             }
@@ -521,7 +527,6 @@
 {
     NM_FUNCTION;
 
-#ifndef NM_WINS_ENV
     delete mSendServiceInterface;
     mSendServiceInterface = NULL;
     delete mSendServiceInterface2;
@@ -532,9 +537,7 @@
     mMailboxServiceInterface = NULL;
     delete mViewerServiceInterface;
     mViewerServiceInterface = NULL;
-#endif
     resetViewStack();
-    // Do housekeeping if needed.
     qApp->quit();
 }
 
@@ -546,13 +549,13 @@
     NM_FUNCTION;
 
     // Exit the application in the next event loop
-    QTimer::singleShot(0, this, SLOT(exitApplication()));
+    QMetaObject::invokeMethod(this, "exitApplication", Qt::QueuedConnection);
 }
 
 /*!
     Getter for main window instance.
 */
-HbMainWindow* NmApplication::mainWindow()
+HbMainWindow *NmApplication::mainWindow()
 {
     NM_FUNCTION;
 
@@ -562,7 +565,7 @@
 /*!
     Getter for main UI extension manager
 */
-NmUiExtensionManager& NmApplication::extManager()
+NmUiExtensionManager &NmApplication::extManager()
 {
     NM_FUNCTION;
 
@@ -572,7 +575,7 @@
 /*!
     Getter for network access manager
 */
-NmViewerViewNetManager& NmApplication::networkAccessManager()
+NmViewerViewNetManager &NmApplication::networkAccessManager()
 {
     NM_FUNCTION;
 
@@ -592,9 +595,9 @@
         HbDeviceProfile altP(currentP.alternateProfileName());
         QSize curPSize = currentP.logicalSize();
         QSize altPSize = altP.logicalSize();
-        if (mMainWindow->orientation()==Qt::Horizontal){
+        if (mMainWindow->orientation() == Qt::Horizontal) {
             // Get wide profile size in landscape
-            if (curPSize.width()>altPSize.width()){
+            if (curPSize.width() > altPSize.width()) {
                 ret = curPSize;
             }
             else{
@@ -603,7 +606,7 @@
         }
         else {
             // Get narrow profile size in portrait
-            if (curPSize.width()<altPSize.width()){
+            if (curPSize.width() < altPSize.width()) {
                 ret = curPSize;
             }
             else{
@@ -621,27 +624,27 @@
 {
     NM_FUNCTION;
 
-    if(event.mCompletionCode != NmNoError && event.mCompletionCode != NmCancelError) {
-        if(event.mOperationType == Synch && event.mCompletionCode == NmAuthenticationError) {
-            mLastOperationMailbox=event.mMailboxId;
-            if (mQueryDialog){
+    if (event.mCompletionCode != NmNoError && event.mCompletionCode != NmCancelError) {
+        if (event.mOperationType == Synch && event.mCompletionCode == NmAuthenticationError) {
+            mLastOperationMailbox = event.mMailboxId;
+            if (mQueryDialog) {
                 delete mQueryDialog;
-                mQueryDialog=NULL;
+                mQueryDialog = NULL;
             }
             mQueryDialog = NmUtilities::displayQuestionNote(hbTrId("txt_mail_dialog_address_or_password_incorrect"),
                                                     this, SLOT(launchSettings(HbAction*)));
         }
-        if(event.mOperationType == Synch && event.mCompletionCode == NmServerConnectionError) {
+        if (event.mOperationType == Synch && event.mCompletionCode == NmServerConnectionError) {
             mLastOperationMailbox=event.mMailboxId;
-            if (mQueryDialog){
+            if (mQueryDialog) {
                 delete mQueryDialog;
-                mQueryDialog=NULL;
+                mQueryDialog = NULL;
             }
             mQueryDialog = NmUtilities::displayQuestionNote(hbTrId("txt_mail_dialog_server_settings_incorrect"),
                                                     this, SLOT(launchSettings(HbAction*)));
         }
         // following applies to all operation/event types
-        if(event.mCompletionCode == NmConnectionError) {
+        if (event.mCompletionCode == NmConnectionError) {
             NmUtilities::displayWarningNote(hbTrId("txt_mail_dialog_mail_connection_error"));
         }
     }
@@ -660,14 +663,11 @@
         if(!mSettingsViewLauncher) {
             mSettingsViewLauncher = new NmSettingsViewLauncher();
             }
-
-        if(mSettingsViewLauncher) {
-            // mailboxname required
-            NmMailboxMetaData *mailboxMetaData = mUiEngine->mailboxById(mLastOperationMailbox); // no ownership
-            if( mailboxMetaData ) {
-                // launch
-                mSettingsViewLauncher->launchSettingsView(mLastOperationMailbox, mailboxMetaData->name());
-            }
+        // mailboxname required
+        NmMailboxMetaData *mailboxMetaData = mUiEngine->mailboxById(mLastOperationMailbox); // no ownership
+        if( mailboxMetaData ) {
+            // launch
+            mSettingsViewLauncher->launchSettingsView(mLastOperationMailbox, mailboxMetaData->name());
         }
     }
 }
@@ -680,7 +680,7 @@
 {
     // At the moment there is no good way to check the foreground state
     QWindowSurface *surface = mMainWindow->windowSurface();
-	mForegroundService = (surface != NULL);
+	mForegroundService = (surface != 0);
 	NM_COMMENT(QString("NmApplication::updateVisibilityState fg=%1").arg(mForegroundService));
 	return mForegroundService;
 }
--- a/emailuis/nmailui/src/nmattachmentlist.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmattachmentlist.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -37,12 +37,10 @@
 NmAttachmentList::~NmAttachmentList()
 { 
     NM_FUNCTION;
-    
-    clearList();
 }
 
 /*!
-    Insert new list item. Returns the count of the attachment in list
+    Insert new list item. Returns the index of the attachment in list
 */
 int NmAttachmentList::insertAttachment(
     const QString &fullFileName,
@@ -95,13 +93,14 @@
 }
 
 /*!
-    Remove attachment from list position
+    Removes attachment from list position
 */
 void NmAttachmentList::removeAttachment(int arrayIndex)
 {
     NM_FUNCTION;
     
-    if (arrayIndex < count()) {
+    if (arrayIndex < count() && 
+        arrayIndex >= 0 ) {
         // Remove UI
         mListWidget.removeAttachment(arrayIndex);
         // Remove from data structure
--- a/emailuis/nmailui/src/nmattachmentmanager.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmattachmentmanager.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -17,7 +17,7 @@
 
 #include "nmuiheaders.h"
 
-const int NmAttachmentManagerInitialProgressPercent = 5;
+static const int NmAttachmentManagerInitialProgressPercent = 5;
 
 /*!
     \class NmAttachmentManager
@@ -32,6 +32,7 @@
     mFetchOperation(NULL),
     mMsgFetchOperation(NULL),
     mFetchObserver(NULL),
+    mFetchMsg(NULL),
     mAttaId(0),
     mProgressValue(0),
     mIsFetching(false)
@@ -48,6 +49,9 @@
     
     // fetch operation deleted in cancel fetch
     cancelFetch();
+    
+    delete mFetchMsg;
+    mFetchMsg = NULL;
 }
 
 /*!
@@ -82,7 +86,7 @@
 
 /*!
     Fetch attachments to a message. 
-    Set observer with setObserver method to get process and complete events
+    Set observer with setObserver method to get progress and complete events
     
     \return bool true if fetch started, otherwise false.
 */
@@ -93,7 +97,7 @@
         QList<NmId> &messagePartIds)
 {
     NM_FUNCTION;
-    bool result = false;
+    bool result(false);
     // cancel old fetch operation, Does nothing if fetch not ongoing
     cancelFetch();
     
@@ -123,7 +127,7 @@
     Fetch all message parts to a message. Fetches also message part data structure,
     if not fetched already.
       If earlier fetch operation exist it is cancelled and deleted.
-    Set observer with setObserver method to get process and complete events
+    Set observer with setObserver method to get progress and complete events
 */
 void NmAttachmentManager::fetchAllMessageParts(
         const NmId &mailboxId, 
@@ -134,7 +138,7 @@
     mFetchMsg = mUiEngine.message(mailboxId,folderId,messageId);
     
     // Check if we have part data structure.    
-    if (mFetchMsg->childParts().count() == 0 &&
+    if (mFetchMsg && mFetchMsg->childParts().count() == 0 &&
         mFetchMsg->fetchedSize() < mFetchMsg->size()) {
 
         // cancel old fetch operation, Does nothing if fetch not ongoing
@@ -239,30 +243,44 @@
     
     if (result == NmNoError) {
         
-        // Reload message
-        mFetchMsg = mUiEngine.message(
-            mFetchMsg->envelope().mailboxId(),
-            mFetchMsg->envelope().folderId(),
-            mFetchMsg->envelope().messageId());
-        
         if (mFetchMsg) {
-            QList<NmId> partIds;
-            NmMessagePart *part;
-            foreach (part, mFetchMsg->childParts()) {
-                if (part->size() > part->fetchedSize()) {
-                    partIds.append(part->partId());
+            
+            NmId mailboxId = mFetchMsg->envelope().mailboxId();
+            NmId folderId = mFetchMsg->envelope().folderId();
+            NmId messageId = mFetchMsg->envelope().messageId();
+            
+            // Delete object
+            delete mFetchMsg;
+            mFetchMsg = NULL;
+            
+            // Reload message
+            mFetchMsg = mUiEngine.message(mailboxId,folderId,messageId);
+            
+            if (mFetchMsg) {
+                QList<NmId> partIds;
+                NmMessagePart *part;
+                foreach (part, mFetchMsg->childParts()) {
+                    if (part->size() > part->fetchedSize()) {
+                        partIds.append(part->partId());
+                    }
                 }
-            }
-            if (partIds.count() > 0) {
-                mMsgFetchOperation = NULL;
-                fetchAttachments(
-                    mFetchMsg->envelope().mailboxId(),
-                    mFetchMsg->envelope().folderId(),
-                    mFetchMsg->envelope().messageId(),
-                    partIds);
+                if (partIds.count() > 0) {
+                    mMsgFetchOperation = NULL;
+                    fetchAttachments(
+                        mFetchMsg->envelope().mailboxId(),
+                        mFetchMsg->envelope().folderId(),
+                        mFetchMsg->envelope().messageId(),
+                        partIds);
+                }
+                else {
+                    mFetchObserver->fetchCompleted(NmNoError);
+                }
+                // Delete object
+                delete mFetchMsg;
+                mFetchMsg = NULL;
             }
             else {
-                mFetchObserver->fetchCompleted(NmNoError);
+                mFetchObserver->fetchCompleted(NmNotFoundError);
             }
         }
         else {
@@ -308,4 +326,3 @@
     
     return mProgressValue;
 }
-
--- a/emailuis/nmailui/src/nmattachmentpicker.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmattachmentpicker.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -15,11 +15,10 @@
 *
 */
 
-#include <fmfiledialog.h>
-#include <xqaiwdecl.h>
 #include "nmuiheaders.h"
-const int NmAttachmentPickerStillMode = 0;
-const int NmAttachmentPickerVideoMode = 1;
+
+static const int NmAttachmentPickerStillMode = 0;
+static const int NmAttachmentPickerVideoMode = 1;
 
 /*!
     \class NmAttachmentPicker
@@ -29,7 +28,7 @@
 /*!
     Constructor
 */
-NmAttachmentPicker::NmAttachmentPicker(QObject* parent):
+NmAttachmentPicker::NmAttachmentPicker(QObject *parent):
     QObject(parent),
     mRequest(NULL)
 {
@@ -85,7 +84,7 @@
     QString path;
     path = FmFileDialog::getSaveFileName(0, hbTrId("txt_mail_dialog_select_file"));
     
-    if(!path.isEmpty()) {
+    if (!path.isEmpty()) {
         QString temp = QDir::toNativeSeparators(path);
         emit attachmentsFetchOk(QVariant(temp));    
     }
@@ -116,11 +115,11 @@
 {
     NM_FUNCTION;
 
-    int cameraIndex = 0;            //primary camera
-    int quality = 0;                //default
-    bool allowModeSwitch = false;   //not allowed to change
-    bool allowCameraSwitch = true;  //allow changes
-    bool allowQualityChange = true; //allow changes
+    int cameraIndex(0);            //primary camera
+    int quality(0);                //default
+    bool allowModeSwitch(false);   //not allowed to change
+    bool allowCameraSwitch(true);  //allow changes
+    bool allowQualityChange(true); //allow changes
     
     QVariantMap parameters;
     parameters.insert(XQCAMERA_INDEX, cameraIndex);
@@ -141,8 +140,8 @@
     param <operation> the operation of the interface
     param <args> the arguments that needed by the operation
 */
-void NmAttachmentPicker::fetch(const QString& interface, 
-    const QString& operation, const QList<QVariant>* args)
+void NmAttachmentPicker::fetch(const QString &interface, 
+    const QString &operation, const QList<QVariant> *args)
 {
     NM_FUNCTION;
     
--- a/emailuis/nmailui/src/nmbaseview.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmbaseview.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -26,7 +26,7 @@
 /*!
     Constructor
 */
-NmBaseView::NmBaseView(NmUiStartParam* startParam,
+NmBaseView::NmBaseView(NmUiStartParam *startParam,
                        NmApplication &application,
                        QGraphicsItem *parent)
 : HbView(parent),
--- a/emailuis/nmailui/src/nmeditorcontent.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmeditorcontent.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -19,26 +19,32 @@
 
 // Layout
 static const char *NMUI_EDITOR_BODY = "BodyTextEdit";
+static const char *NMUI_EDITOR_SCROLL_AREA = "scrollArea";
+static const char *NMUI_EDITOR_SCROLL_AREA_CONTENTS = "scrollAreaContents";
 
+// Regular expression for selecting img tags with "cid" in the mail.
+static const char *NMUI_EDITOR_REMOVE_EMBD_IMAGES_REG = 
+    "(<img (src\\s*=\\s*)(.{0,1}cid)([^<]+)(>\\s*|/>\\s*|></img>\\s*))";
+	
 /*!
     Constructor
 */
-NmEditorContent::NmEditorContent(QGraphicsItem *parent,
-                                 NmEditorView *parentView,
+NmEditorContent::NmEditorContent(QObject *parent,
                                  HbDocumentLoader *documentLoader,
-                                 QNetworkAccessManager &manager) :
-    HbWidget(parent),
+                                 QNetworkAccessManager &manager,
+                                 NmApplication &application) :
+    QObject(parent),
     mHeaderWidget(NULL),
-    mParentView(parentView),
-    mEditorLayout(NULL),
-    mMessageBodyType(PlainText),
+    mMessageBodyType(NmPlainText),
     mEditorWidget(NULL),
-    mBackgroundScrollArea((NmBaseViewScrollArea*)parent)
+    mScrollArea(NULL),
+    mScrollAreaContents(NULL),
+    mApplication(application)
 {
     NM_FUNCTION;
 
-    // Add header area handling widget into layout
-    mHeaderWidget = new NmEditorHeader(documentLoader);
+    // Construct container for the header widgets
+    mHeaderWidget = new NmEditorHeader(this, documentLoader);
 
     // Get pointer to body text area handling widget
     mEditorWidget = qobject_cast<NmEditorTextEdit *>(documentLoader->findWidget(NMUI_EDITOR_BODY));
@@ -48,14 +54,15 @@
     mEditorWidget->setDocument(textDocument); 
     textDocument->setParent(mEditorWidget); // ownership changes
 
-    mEditorWidget->init(mBackgroundScrollArea);
-    // we are interested in the editor widget's height changes
-    connect(mEditorWidget, SIGNAL(editorContentHeightChanged()), this,
-        SLOT(setEditorContentHeight()));
+    mScrollArea = qobject_cast<NmBaseViewScrollArea *>
+        (documentLoader->findObject(NMUI_EDITOR_SCROLL_AREA));
 
     // Enable style picker menu item.
     mEditorWidget->setFormatDialog(new HbFormatDialog());
 
+    mScrollAreaContents =
+        qobject_cast<HbWidget *>(documentLoader->findWidget(NMUI_EDITOR_SCROLL_AREA_CONTENTS));
+    
     // Create signal slot connections
     createConnections();
 }
@@ -66,8 +73,6 @@
 NmEditorContent::~NmEditorContent()
 {
     NM_FUNCTION;
-    
-   delete mHeaderWidget;
 }
 
 /*!
@@ -75,88 +80,76 @@
     present, reply header is generated and set to editor. Reply
     envelope ownership is not transferred here.
  */
-void NmEditorContent::setMessageData(const NmMessage &originalMessage,
-                                     bool createReplyHeader)
+void NmEditorContent::setMessageData(const NmMessage &originalMessage, 
+                                     NmUiEditorStartMode &editorStartMode)
 {
     NM_FUNCTION;
     
     QString bodyContent;
     
-    // We create the "reply" header (also for forward message), but not to draft message.
-    if (mEditorWidget && createReplyHeader) {          
-        QTextCursor cursor = mEditorWidget->textCursor();
-        cursor.setPosition(0);
-        cursor.insertHtml(NmUtilities::createReplyHeader(originalMessage.envelope()));
+    // Create the "reply" header (also for forward message)
+    if (editorStartMode==NmUiEditorReply || editorStartMode==NmUiEditorReplyAll || 
+        editorStartMode==NmUiEditorForward) {
+        bodyContent.append(NmUtilities::createReplyHeader(originalMessage.envelope()));
     }
-    // Take reply header as html format.
-    bodyContent.append(mEditorWidget->toHtml());
     
     // Check which part is present. Html or plain text part. We use the original message parts.
     const NmMessagePart *htmlPart = originalMessage.htmlBodyPart();
     const NmMessagePart *plainPart = originalMessage.plainTextBodyPart();
  
-    if (htmlPart && mEditorWidget) {
+    if (htmlPart) {
         bodyContent.append(htmlPart->textContent());
+        if(editorStartMode==NmUiEditorReply || editorStartMode==NmUiEditorReplyAll ) {
+            removeEmbeddedImages(bodyContent);
+        }
         emit setHtml(bodyContent);
-        mMessageBodyType = HTMLText;
+        mMessageBodyType = NmHTMLText;
     }
     else if (plainPart) {
         // Plain text part was present, set it to HbTextEdit
         bodyContent.append(plainPart->textContent());
         emit setPlainText(bodyContent);
-        mMessageBodyType = PlainText;
+        mMessageBodyType = NmPlainText;
     }
 }  
 
 /*!
-   This method set new height for the editor content when header or body field
-   height has been changed.
- */
-void NmEditorContent::setEditorContentHeight()
-{
-    NM_FUNCTION;
-    
-	const QSizeF reso = HbDeviceProfile::current().logicalSize();
-    qreal containerHeight = mEditorWidget->contentHeight() + mHeaderWidget->headerHeight();
-    if (containerHeight < reso.height()) {
-        //Currently content height is too long because Chrome hiding is not supported.
-        //Fix this when Chrome works.
-        containerHeight = reso.height();
-        qreal bodyContentHeight =
-            reso.height() - mHeaderWidget->headerHeight();
-        mEditorWidget->setPreferredHeight(bodyContentHeight);
-        mEditorWidget->setMaximumHeight(bodyContentHeight);
-    }
-    mParentView->scrollAreaContents()->setMinimumHeight(containerHeight);
-    mParentView->scrollAreaContents()->setMaximumHeight(containerHeight);
-    mBackgroundScrollArea->setMaximumHeight(containerHeight);
-}
-
-/*!
    This method creates all needed signal-slot connections
  */
 void NmEditorContent::createConnections()
 {
     NM_FUNCTION;
     
-    // Body edit widget is also interested about bg scroll position change
-    connect(mBackgroundScrollArea, SIGNAL(scrollPositionChanged(QPointF)),
-            mEditorWidget, SLOT(updateScrollPosition(QPointF)));
     // Signal for setting HbTextEdit widgets html content
     connect(this, SIGNAL(setHtml(QString)),
             mEditorWidget, SLOT(setHtml(QString)), Qt::QueuedConnection);
+
     // Signal for setting HbTextEdit widgets plain text content
     connect(this, SIGNAL(setPlainText(QString)),
             mEditorWidget, SLOT(setPlainText(QString)), Qt::QueuedConnection);
+
     // Inform text edit widget that header height has been changed
-    connect(mHeaderWidget, SIGNAL(headerHeightChanged(int)),
-            mEditorWidget, SLOT(setHeaderHeight(int)));
+    connect(mHeaderWidget, SIGNAL(headerHeightChanged(int)), this, SLOT(setEditorContentHeight()),
+        Qt::QueuedConnection);
+
+    // we are interested in the document's height changes
+    connect(mEditorWidget->document()->documentLayout(), SIGNAL(documentSizeChanged(QSizeF)), this,
+        SLOT(setEditorContentHeight()), Qt::QueuedConnection);
+
+    // We need to update the scroll position according the editor cursor position
+    connect(mEditorWidget, SIGNAL(cursorPositionChanged(int, int)), this, 
+        SLOT(setScrollPosition(int, int)), Qt::QueuedConnection);
+    
+    // We need to know the scroll area's current position for calculating the new position in
+	// setScrollPosition
+    connect(mScrollArea, SIGNAL(scrollPositionChanged(QPointF)), this, 
+        SLOT(updateScrollPosition(QPointF)), Qt::QueuedConnection);
 }
 
 /*!
     Return pointer to the email body text edit widget
  */
-NmEditorTextEdit* NmEditorContent::editor() const
+NmEditorTextEdit *NmEditorContent::editor() const
 {
     NM_FUNCTION;
     
@@ -166,10 +159,116 @@
 /*!
     Return pointer to the header widget
  */
-NmEditorHeader* NmEditorContent::header() const
+NmEditorHeader *NmEditorContent::header() const
 {
     NM_FUNCTION;
     
     return mHeaderWidget;
 }
 
+/*!
+    This slot is called when header widget height has been changed. Function performs
+    the repositioning of the body field and resizing of the editor and content area.
+ */
+void NmEditorContent::setEditorContentHeight()
+{
+    NM_FUNCTION;
+    
+    qreal topMargin = 0;
+    HbStyle().parameter("hb-param-margin-gene-top", topMargin);
+    
+    // header height
+    qreal headerHeight = mHeaderWidget->headerHeight();
+
+    // body area editor's document height with margins added
+    qreal documentHeightAndMargins = mEditorWidget->document()->size().height() +
+        (mEditorWidget->document()->documentMargin() * 2);
+
+    // get the chrome height
+    qreal chromeHeight = 0;
+    HbStyle().parameter("hb-param-widget-chrome-height", chromeHeight);
+    
+    qreal toolbarHeight = 0;
+    HbStyle().parameter("hb-param-widget-toolbar-height", toolbarHeight);
+
+    // screen height
+    qreal screenHeight = mApplication.screenSize().height();
+
+    // set min size for the body area so that at least the screen area is always filled
+    qreal bodyAreaMinSize = screenHeight - chromeHeight - topMargin - headerHeight;
+    
+    qreal bodyAreaSize = fmax(bodyAreaMinSize, documentHeightAndMargins);
+
+    mScrollAreaContents->setPreferredHeight(topMargin + headerHeight + bodyAreaSize);
+}
+
+/*!
+    This slot is called when cursor position is changed in body area using
+    'pointing stick' or keyboard. Function will update the scroll position
+    of the content so that cursor does not go outside of the screen or
+    behind the virtual keyboard.
+ */
+void NmEditorContent::setScrollPosition(int oldPos, int newPos)
+{
+    NM_FUNCTION;
+    
+    Q_UNUSED(oldPos);
+
+    qreal chromeHeight = 0;
+    HbStyle().parameter("hb-param-widget-chrome-height", chromeHeight);
+    
+    const QSizeF screenReso = mApplication.screenSize();
+    qreal maxHeight = screenReso.height() - chromeHeight;
+
+    // Get cursor position coordinates
+    QRectF cursorPosPix = mEditorWidget->rectForPosition(newPos);
+    
+    // Calculate the screen top and bottom boundaries, this means the part of the
+    // background scroll area which is currently visible.
+    qreal visibleRectTopBoundary;
+    qreal visibleRectBottomBoundary;
+    
+    qreal headerHeight = mHeaderWidget->headerHeight();
+
+    if (mScrollPosition.y() < headerHeight) {
+        // Header is completely or partially visible
+        visibleRectTopBoundary = headerHeight - mScrollPosition.y();
+        visibleRectBottomBoundary = maxHeight - visibleRectTopBoundary;
+    }
+    else {
+        // Header is not visible
+        visibleRectTopBoundary = mScrollPosition.y() - headerHeight;
+        visibleRectBottomBoundary = visibleRectTopBoundary + maxHeight;
+    }
+
+    // Do scrolling if cursor is out of the screen boundaries
+    if (cursorPosPix.y() > visibleRectBottomBoundary) {
+        // Do scroll forward
+        mScrollArea->scrollContentsTo(QPointF(0, cursorPosPix.y() - maxHeight + headerHeight));
+    }
+    else if (cursorPosPix.y() + headerHeight < mScrollPosition.y()) {
+        // Do scroll backward
+        mScrollArea->scrollContentsTo(QPointF(0, cursorPosPix.y() + headerHeight));
+    }
+}
+
+/*!
+    This slot is called when background scroll areas scroll position has been shanged.
+*/
+void NmEditorContent::updateScrollPosition(const QPointF &newPosition)
+{
+    NM_FUNCTION;
+    
+    mScrollPosition = newPosition;
+}
+
+/*!
+    Removes embedded images from the message body
+ */
+void NmEditorContent::removeEmbeddedImages(QString &bodyContent)
+{
+    NM_FUNCTION;
+ 
+    QRegExp regExp(NMUI_EDITOR_REMOVE_EMBD_IMAGES_REG, Qt::CaseInsensitive);
+    bodyContent.remove(regExp);
+}
\ No newline at end of file
--- a/emailuis/nmailui/src/nmeditorheader.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmeditorheader.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -31,15 +31,16 @@
 static const char *NMUI_EDITOR_PREFIX_CC = "editorCc";
 static const char *NMUI_EDITOR_PREFIX_BCC = "editorBcc";
 
-static const int MaxRows = 10000;
+static const int NmMaxRows = 10000;
 
 // this timeout seems to be long enough for all cases. see sendDelayedHeaderHeightChanged
-static const int LayoutSystemWaitTimer = 500; // 0.5 sec
+static const int NmLayoutSystemWaitTimer = 500; // 0.5 sec
 
 /*!
     Constructor
 */
-NmEditorHeader::NmEditorHeader(HbDocumentLoader *documentLoader) :
+NmEditorHeader::NmEditorHeader(QObject *parent, HbDocumentLoader *documentLoader) :
+    QObject(parent),
     mDocumentLoader(documentLoader),
     mHeaderHeight(0),
     mIconVisible(false),
@@ -76,52 +77,62 @@
     // are hidden and removed from the layout at this phase.    
     HbWidget *contentWidget =
         qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_CONTAINER));
-    mLayout = static_cast<QGraphicsLinearLayout *>(contentWidget->layout());
-
-    // base class QObject takes the deleting responsibility
-    mToField = new NmRecipientField(this, *mDocumentLoader, NMUI_EDITOR_PREFIX_TO);
-    mCcField = new NmRecipientField(this, *mDocumentLoader, NMUI_EDITOR_PREFIX_CC);
-    mBccField = new NmRecipientField(this, *mDocumentLoader, NMUI_EDITOR_PREFIX_BCC);
+    if (contentWidget) {
+        mLayout = static_cast<QGraphicsLinearLayout *>(contentWidget->layout());
+    
+        // base class QObject takes the deleting responsibility
+        mToField = new NmRecipientField(this, *mDocumentLoader, NMUI_EDITOR_PREFIX_TO);
+        mCcField = new NmRecipientField(this, *mDocumentLoader, NMUI_EDITOR_PREFIX_CC);
+        mBccField = new NmRecipientField(this, *mDocumentLoader, NMUI_EDITOR_PREFIX_BCC);
+    
+        // Sets up editor properties like no prediction, lower case preferred etc.
+        HbEditorInterface toEditorInterface(mToField->editor());
+        HbEditorInterface ccEditorInterface(mCcField->editor());
+        HbEditorInterface bccEditorInterface(mBccField->editor());
+        toEditorInterface.setUpAsLatinAlphabetOnlyEditor();
+        ccEditorInterface.setUpAsLatinAlphabetOnlyEditor();
+        bccEditorInterface.setUpAsLatinAlphabetOnlyEditor();
 
-    // Cc field is not shown by default. It needs to be both hidden and removed from the layout.
-	mCcWidget = qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_CC_FIELD));
-    mCcWidget->hide();
-    mLayout->removeItem(mCcWidget);
-    
-    // Bcc field is not shown by default. It needs to be both hidden and removed from the layout.
-    mBccWidget = qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_BCC_FIELD));
-    mBccWidget->hide();
-    mLayout->removeItem(mBccWidget);
-
-    mSubjectWidget =
-        qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_SUBJECT_FIELD));
-    mSubjectLayout = static_cast<QGraphicsLinearLayout *>(mSubjectWidget->layout());
+        // Cc field is not shown by default. It needs to be both hidden and removed from the layout.
+        mCcWidget = qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_CC_FIELD));
+        mCcWidget->hide();
+        mLayout->removeItem(mCcWidget);
+          
+        // Bcc field is not shown by default. It needs to be both hidden and removed from the layout.
+        mBccWidget = qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_BCC_FIELD));
+        mBccWidget->hide();
+        mLayout->removeItem(mBccWidget);
     
-    // Add Subject: field
-    mSubjectEdit = qobject_cast<NmHtmlLineEdit *>
-        (mDocumentLoader->findWidget(NMUI_EDITOR_SUBJECT_EDIT));
-    mSubjectEdit->setMaxRows(MaxRows);
-
-    // Add attachment list
-    NmAttachmentListWidget *attachmentList = qobject_cast<NmAttachmentListWidget *>
-        (mDocumentLoader->findWidget(NMUI_EDITOR_ATTACHMENT_LIST));
-    // Create attachment list handling object
-    mAttachmentList = new NmAttachmentList(*attachmentList);
-    mAttachmentList->setParent(this); // ownership changes
-    attachmentList->hide();
-    mLayout->removeItem(attachmentList);
-
-    // Add priority icon
-    mPriorityIcon = qobject_cast<HbLabel *>
-        (mDocumentLoader->findWidget(NMUI_EDITOR_PRIORITY_ICON));
-    mPriorityIcon->hide();
-    mSubjectLayout->removeItem(mPriorityIcon);
-
-    // follow-up icon is not yet supported
-    HbLabel *followUpIcon = qobject_cast<HbLabel *>
-        (mDocumentLoader->findWidget(NMUI_EDITOR_FOLLOWUP_ICON));
-    followUpIcon->hide();
-    mSubjectLayout->removeItem(followUpIcon);
+        mSubjectWidget =
+            qobject_cast<HbWidget *>(mDocumentLoader->findWidget(NMUI_EDITOR_SUBJECT_FIELD));
+        mSubjectLayout = static_cast<QGraphicsLinearLayout *>(mSubjectWidget->layout());
+          
+        // Add Subject: field
+        mSubjectEdit = qobject_cast<NmHtmlLineEdit *>
+            (mDocumentLoader->findWidget(NMUI_EDITOR_SUBJECT_EDIT));
+        mSubjectEdit->setMaxRows(NmMaxRows);
+    
+        // Add attachment list
+        NmAttachmentListWidget *attachmentList = qobject_cast<NmAttachmentListWidget *>
+            (mDocumentLoader->findWidget(NMUI_EDITOR_ATTACHMENT_LIST));
+        // Create attachment list handling object
+        mAttachmentList = new NmAttachmentList(*attachmentList);
+        mAttachmentList->setParent(this); // ownership changes
+        attachmentList->hide();
+        mLayout->removeItem(attachmentList);
+    
+        // Add priority icon
+        mPriorityIcon = qobject_cast<HbLabel *>
+            (mDocumentLoader->findWidget(NMUI_EDITOR_PRIORITY_ICON));
+        mPriorityIcon->hide();
+        mSubjectLayout->removeItem(mPriorityIcon);
+    
+        // follow-up icon is not yet supported
+        HbLabel *followUpIcon = qobject_cast<HbLabel *>
+            (mDocumentLoader->findWidget(NMUI_EDITOR_FOLLOWUP_ICON));
+        followUpIcon->hide();
+        mSubjectLayout->removeItem(followUpIcon);    
+    }
 }
 
 /*!
@@ -179,7 +190,7 @@
 }
 
 /*!
-    Return the height of the whole header widget.
+    Return the sum of the header widget heights. This contains all the spacings a well. 
  */
 qreal NmEditorHeader::headerHeight() const
 {
@@ -225,7 +236,7 @@
 void NmEditorHeader::sendDelayedHeaderHeightChanged()
 {
     NM_FUNCTION;
-	QTimer::singleShot(LayoutSystemWaitTimer, this, SLOT(sendHeaderHeightChanged()));
+	QTimer::singleShot(NmLayoutSystemWaitTimer, this, SLOT(sendHeaderHeightChanged()));
 }
 
 /*!
@@ -289,7 +300,7 @@
 {
     NM_FUNCTION;
     
-    bool recipientsFieldsEmpty = true;
+    bool recipientsFieldsEmpty(true);
     if (mToField->text().length()) {
         recipientsFieldsEmpty = false;
     }
@@ -380,7 +391,7 @@
         mLayout->insertItem(mLayout->count() - 1, &mAttachmentList->listWidget());
         mAttachmentList->listWidget().show();
     }
-    sendDelayedHeaderHeightChanged();
+    sendHeaderHeightChanged();
 }
 
 /*!
@@ -439,8 +450,7 @@
 void NmEditorHeader::attachmentActivated(int arrayIndex)
 {
     NM_FUNCTION;
-    
-    //
+
     emit attachmentShortPressed(mAttachmentList->nmIdByIndex(arrayIndex));    
 }
 
--- a/emailuis/nmailui/src/nmeditortextdocument.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmeditortextdocument.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -67,8 +67,10 @@
                 emit documentLayoutChanged();
             }
         }
-        mReplyList.removeAll(reply);
-        reply->deleteLater();
+        // If this has created the request, then this needs to handle deletion also.
+        if (mReplyList.removeAll(reply)) {
+            reply->deleteLater();
+        }
     }
 }
 
--- a/emailuis/nmailui/src/nmeditorview.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmeditorview.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -19,12 +19,8 @@
 // Layout file and view
 static const char *NMUI_EDITOR_VIEW_XML = ":/docml/nmeditorview.docml";
 static const char *NMUI_EDITOR_VIEW= "editorview";
-static const char *NMUI_EDITOR_SCROLL_AREA = "scrollArea";
-static const char *NMUI_EDITOR_SCROLL_AREA_CONTENTS = "scrollAreaContents";
 
-static const int NmOrientationTimer=100;
-
-static const QString Delimiter("; ");
+static const QString NmDelimiter("; ");
 
 /*!
 	\class NmEditorView
@@ -45,7 +41,6 @@
       mUiEngine(uiEngine),
       mAttaManager(attaManager),
       mDocumentLoader(NULL),
-      mScrollArea(NULL),
       mEditWidget(NULL),
       mHeaderWidget(NULL),
       mMessage(NULL),
@@ -92,7 +87,6 @@
     delete mMessage;
     mWidgetList.clear();
     delete mDocumentLoader;
-    delete mContentWidget;
     delete mPrioritySubMenu;
     
     if (mAttachmentListContextMenu) {
@@ -124,7 +118,7 @@
     mPrioritySubMenu = NULL;
 
     // Use document loader to load the view
-    bool ok = false;
+    bool ok(false);
     mWidgetList = mDocumentLoader->load(NMUI_EDITOR_VIEW_XML, &ok);
 
     if (ok == true && mWidgetList.count()) {
@@ -134,14 +128,11 @@
             setWidget(view);
         }
 
-        mScrollArea = qobject_cast<NmBaseViewScrollArea *>
-            (mDocumentLoader->findObject(NMUI_EDITOR_SCROLL_AREA));
-        mScrollAreaContents = qobject_cast<HbWidget *>
-             (mDocumentLoader->findObject(NMUI_EDITOR_SCROLL_AREA_CONTENTS));
+        mContentWidget = new NmEditorContent(this, mDocumentLoader, 
+            mApplication.networkAccessManager(), mApplication);
 
-        mContentWidget = new NmEditorContent(mScrollArea, this, mDocumentLoader, 
-            mApplication.networkAccessManager());
         mEditWidget = mContentWidget->editor();
+
         mHeaderWidget = mContentWidget->header();
 
         // Set default color for user - entered text if editor is in re/reAll/fw mode
@@ -197,23 +188,45 @@
 {
     NM_FUNCTION;
     
-    Q_UNUSED(orientation);
-    // Adjust content height
-    QTimer::singleShot(NmOrientationTimer, this, SLOT(adjustViewDimensions()));
-    QTimer::singleShot(NmOrientationTimer, mHeaderWidget, SLOT(sendHeaderHeightChanged()));
+    // If switching to horizontal, chrome must be hided
+    if (mVkbHost && orientation == Qt::Horizontal &&
+        mVkbHost->keypadStatus() == HbVkbHost::HbVkbStatusOpened) {
+        showChrome(false);
+    }
+    
+    // content widget height needs to be set according to the new orientation to get the scroll
+	// area work correctly
+	mHeaderWidget->sendDelayedHeaderHeightChanged();
 }
 
 /*!
-    Set new dimensions after orientation change.
-*/
-void NmEditorView::adjustViewDimensions()
+    This slot is signaled by VKB when it opens
+ */
+void NmEditorView::vkbOpened()
+{
+    if (mApplication.mainWindow()->orientation() == Qt::Horizontal) {
+        showChrome(false);	
+    }
+}
+
+/*!
+    This slot is signaled by VKB when it closes.
+ */
+void NmEditorView::vkbClosed()
 {
-    NM_FUNCTION;
-    
-    if (mScrollAreaContents) {
-        const QSize reso = mApplication.screenSize();
-        mScrollAreaContents->setMinimumWidth(reso.width());
-        mScrollAreaContents->setMaximumWidth(reso.width());
+	showChrome(true);
+}
+
+/*!
+    Hide or show chrome.
+ */
+void NmEditorView::showChrome(bool show)
+{
+    if (show) {
+        showItems(Hb::StatusBarItem | Hb::TitleBarItem | Hb::ToolBarItem);		
+    }
+    else {
+        hideItems(Hb::StatusBarItem | Hb::TitleBarItem | Hb::ToolBarItem);
     }
 }
 
@@ -227,52 +240,45 @@
     return NmUiViewMessageEditor;
 }
 
-/*!
-    ScrollArea contents
-*/
-HbWidget* NmEditorView::scrollAreaContents()
-{
-    NM_FUNCTION;
-    
-    return mScrollAreaContents;
-}
-
 /*
    Launch dialog for query user if we want to exit the editor
 */
 void NmEditorView::okToExitView()
 {
     NM_FUNCTION;
-    
-    NmEditorHeader *header = mContentWidget->header();
-    
-    bool okToExit = true;
+       
+    bool okToExit(true);
     
-    // show the query if the message has not been sent
-    if (mMessage && header) {
-        // see if editor has any content
-        int subjectLength = 0;
-        if (header->subjectEdit()) {
-            subjectLength = header->subjectEdit()->text().length();
-        }
-        
-        QList<NmMessagePart*> attachmentList;
-        mMessage->attachmentList(attachmentList);
-                    
-        okToExit = (subjectLength == 0 && mContentWidget->editor()->document()->isEmpty());
-
-        // content exists, verify exit from user
-        if (!okToExit) {
-            if (mQueryDialog) {
-                delete mQueryDialog;
-                mQueryDialog = 0;
+    if (mContentWidget) {
+        NmEditorHeader *header = mContentWidget->header();
+        // show the query if the message has not been sent
+        if (mMessage && header) {
+            // see if editor has any content
+            int subjectLength = 0;
+            if (header->subjectEdit()) {
+                subjectLength = header->subjectEdit()->text().length();
             }
-            // Launch query dialog.
-            mQueryDialog = 
-                NmUtilities::displayQuestionNote(hbTrId("txt_mail_dialog_save_message_to_drafts"),
-                                                            this,
-                                                            SLOT(okToExitQuery(HbAction*)));
-        }
+            
+            QList<NmMessagePart*> attachmentList;
+            mMessage->attachmentList(attachmentList);
+            
+            if (mContentWidget->editor()) {
+                okToExit = (subjectLength == 0 && mContentWidget->editor()->document()->isEmpty());            
+            }
+    
+            // content exists, verify exit from user
+            if (!okToExit) {
+                if (mQueryDialog) {
+                    delete mQueryDialog;
+                    mQueryDialog = 0;
+                }
+                // Launch query dialog.
+                mQueryDialog = 
+                    NmUtilities::displayQuestionNote(hbTrId("txt_mail_dialog_save_message_to_drafts"),
+                                                                this,
+                                                                SLOT(okToExitQuery(HbAction*)));
+            }
+        }    
     }
     
     // no need to query anything, just exit.
@@ -286,7 +292,7 @@
 /*!
     Handle the user selection is it ok to exit.
 */
-void NmEditorView::okToExitQuery(HbAction* action)
+void NmEditorView::okToExitQuery(HbAction *action)
 {
     NM_FUNCTION;
     
@@ -356,12 +362,16 @@
     menu()->addAction(dummy);
 
     initializeVKB();
+    
+    //Get VKB host instance and start to listen VKB open and close signals for hiding the chrome.
+    HbEditorInterface editorInterface(mContentWidget->editor());
+    mVkbHost = editorInterface.vkbHost();
+    connect(mVkbHost, SIGNAL(keypadOpened()), this, SLOT(vkbOpened()));
+    connect(mVkbHost, SIGNAL(keypadClosed()), this, SLOT(vkbClosed()));
+
     connect(mContentWidget->header(), SIGNAL(recipientFieldsHaveContent(bool)),
             this, SLOT(setButtonsDimming(bool)) );
 
-    // Set dimensions
-    adjustViewDimensions();
-	
     // Connect to observe orientation change events
     connect(mApplication.mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
             this, SLOT(orientationChanged(Qt::Orientation)));
@@ -427,19 +437,34 @@
         startMessageCreation(*mStartParam);
     }
     else {
-        mWaitDialog->close();
-		
-        // Show fetching failed note         
-        HbNotificationDialog *note = new HbNotificationDialog(); 
-        note->setIcon(HbIcon(QLatin1String("note_warning")));
-        QString noteText = hbTrId("txt_mail_dpopinfo_loading_failed");
-        note->setTitle(noteText);
-        note->setTitleTextWrapping(Hb::TextWordWrap);
-        note->setDismissPolicy(HbPopup::TapAnywhere);
-        note->setAttribute(Qt::WA_DeleteOnClose);
-        note->setSequentialShow(true);
-        note->show();
+        // Show the fetching failed note only when
+        // the error is not Device/System errors, 
+        if (result != NmNoError && 
+            result != NmNotFoundError &&
+            result != NmGeneralError &&
+            result != NmCancelError &&
+            result != NmAuthenticationError &&
+            result != NmServerConnectionError &&
+            result != NmConnectionError) {
+            
+            HbNotificationDialog *note = new HbNotificationDialog(); 
+            
+            bool enalbeAttribute(true);
+            note->setAttribute(Qt::WA_DeleteOnClose, enalbeAttribute);
+            
+            note->setIcon(HbIcon(QLatin1String("note_warning")));
+            
+            note->setTitle(hbTrId("txt_mail_dpopinfo_loading_failed"));
+            note->setTitleTextWrapping(Hb::TextWordWrap);
+            
+            note->setDismissPolicy(HbNotificationDialog::TapAnywhere);
+            note->setTimeout(HbNotificationDialog::StandardTimeout);
+            
+            note->setSequentialShow(true);
+            note->show();
+        }
         
+        mWaitDialog->close();         
         QMetaObject::invokeMethod(&mApplication, "popView", Qt::QueuedConnection);
     }
 }
@@ -486,7 +511,7 @@
     if (mMessageCreationOperation && mMessageCreationOperation->isRunning()) {
         mMessageCreationOperation->cancelOperation();
     }
-	
+	  
     // original message is now fetched so start message creation
     if (startMode == NmUiEditorForward) {
         mMessageCreationOperation = mUiEngine.createForwardMessage(mailboxId, msgId);
@@ -530,7 +555,7 @@
     // verify addresses before sending
     QList<NmAddress> invalidAddresses;
     if (mMessage) {
-        NmUtilities::getRecipientsFromMessage(*mMessage, invalidAddresses, NmUtilities::InvalidAddress);
+        NmUtilities::getRecipientsFromMessage(*mMessage, invalidAddresses, NmUtilities::NmInvalidAddress);
     }
     
     if (invalidAddresses.count() > 0) {
@@ -575,11 +600,7 @@
     mMessage = NULL;
     preliminaryOperations.clear();
 
-#ifndef NM_WINS_ENV
     bool service = XQServiceUtil::isService();
-#else
-    bool service = false;
-#endif
 
     // If sending is started as a service, progress dialog needs to be shown
     // so long that sending is finished otherwise we can close pop current view.
@@ -595,12 +616,10 @@
         connect(mServiceSendingDialog, SIGNAL(cancelled()),
             this, SLOT(sendProgressDialogCancelled()));
 
-#ifndef NM_WINS_ENV
         if (!XQServiceUtil::isEmbedded()) {
             // Hide the application.
             XQServiceUtil::toBackground(true);
         }
-#endif
          // Display the wait dialog.
          mServiceSendingDialog->setModal(true);
          mServiceSendingDialog->setBackgroundFaded(true);
@@ -803,12 +822,7 @@
                                                *htmlPart);
             }
 
-            if (editorStartMode==NmUiEditorFromDrafts) {
-                mContentWidget->setMessageData(*originalMessage, false);
-            }
-            else {
-                mContentWidget->setMessageData(*originalMessage);
-            }
+		mContentWidget->setMessageData(*originalMessage, editorStartMode);
         }
 
         delete originalMessage;
@@ -1367,7 +1381,7 @@
     while (i != list.constEnd() && *i) {
         if (i > list.constBegin()) {
             // Add the delimiter.
-            addressesString += Delimiter;
+            addressesString += NmDelimiter;
         }
 
         addressesString += (*i)->address();
@@ -1395,7 +1409,7 @@
     while (i != list.constEnd()) {
         if (i > list.constBegin()) {
             // Add the delimiter.
-            addressesString += Delimiter;
+            addressesString += NmDelimiter;
         }
 
         addressesString += (*i).address();
@@ -1493,6 +1507,3 @@
         }
     }
 }
-
-
-// End of file.
--- a/emailuis/nmailui/src/nmmailboxlistview.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmmailboxlistview.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -78,14 +78,11 @@
     NM_FUNCTION;
     
     // Use document loader to load the view
-    bool ok = false;
+    bool ok(false);
     setObjectName(QString(NMUI_MAILBOX_LIST_VIEW));
-    QObjectList objectList;
-    objectList.append(this);
     // Pass the view to documentloader. Document loader uses this view
     // when docml is parsed, instead of creating new view.
     if (mDocumentLoader) {
-        mDocumentLoader->setObjectTree(objectList);
         mWidgetList = mDocumentLoader->load(NMUI_MAILBOX_LIST_VIEW_XML, &ok);
     }
 
@@ -211,17 +208,4 @@
     }
 }
 
-/*!
-    handleActionCommand. From NmMenuObserver, extension manager calls this
-    call to handle menu command in the UI.
-*/
 
-void NmMailboxListView::handleActionCommand(NmActionResponse &actionResponse)
-{
-    NM_FUNCTION;
-    
-    // Handle context menu commands here
-    Q_UNUSED(actionResponse);
-}
-
-
--- a/emailuis/nmailui/src/nmmailboxlistviewitem.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmmailboxlistviewitem.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -132,17 +132,3 @@
     QGraphicsWidget::polishEvent();
 }
 
-/*!
-    paint. Paint function for line painting.
-*/
-void NmMailboxListViewItem::paint(
-    QPainter *painter,
-    const QStyleOptionGraphicsItem *option,
-    QWidget *widget)
-{
-    NM_FUNCTION;
-    
-    Q_UNUSED(option);
-    Q_UNUSED(widget);
-    Q_UNUSED(painter);
-}
--- a/emailuis/nmailui/src/nmmailboxselectiondialog.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmmailboxselectiondialog.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -43,8 +43,6 @@
       mMailboxId(0)
 {
     NM_FUNCTION;
-    
-    // No implementation required.
 }
 
 
@@ -107,7 +105,7 @@
     
     // Use the document loader to load the widgets.
     HbDocumentLoader documentLoader;
-    bool documentLoaded = false;
+    bool documentLoaded(false);
 
     QObjectList objectList;
     objectList.append(this);
--- a/emailuis/nmailui/src/nmmailboxserviceinterface.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmmailboxserviceinterface.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -33,18 +33,12 @@
 NmMailboxServiceInterface::NmMailboxServiceInterface(QObject *parent,
         NmUiEngine &uiEngine,
         NmApplication *application)
-#ifndef NM_WINS_ENV
     : XQServiceProvider(emailFullServiceNameMailbox, parent),
-#else
-    : QObject(parent),
-#endif
       mUiEngine(uiEngine),
       mApplication(application),
       mAsyncReqId(0)
 {
-#ifndef NM_WINS_ENV
     publishAll();
-#endif
 }
 
 
@@ -66,7 +60,6 @@
 {
     NM_FUNCTION;
 
-#ifndef NM_WINS_ENV
 
     // Get the given ID and convert it into NmId type.
     NmId mailboxNmId(data.toULongLong());
@@ -84,21 +77,23 @@
 
         // Bring the application to the foreground.
         XQServiceUtil::toBackground(false);
-        HbMainWindow *mainWindow = mApplication->mainWindow();
-        mainWindow->show();
+        if (mApplication) {
+            HbMainWindow *mainWindow = mApplication->mainWindow();
+            mainWindow->show();
 
-        // Launch the message list view.
-        NmUiStartParam *startParam =
-            new NmUiStartParam(NmUiViewMessageList,
-                               mailboxNmId,
-                               inboxId, // folder id
-                               0, // message id
-                               NmUiEditorCreateNew, // editor start mode
-                               NULL, // address list
-                               NULL, // attachment list
-                               true); // start as service
-        mApplication->enterNmUiView(startParam);
-
+            // Launch the message list view.
+            NmUiStartParam *startParam =
+                new NmUiStartParam(NmUiViewMessageList,
+                                   mailboxNmId,
+                                   inboxId, // folder id
+                                   0, // message id
+                                   NmUiEditorCreateNew, // editor start mode
+                                   NULL, // address list
+                                   NULL, // attachment list
+                                   true); // start as service
+            mApplication->enterNmUiView(startParam);
+        }
+       
         completeRequest(mAsyncReqId, 0);
     }
     else {
@@ -117,7 +112,6 @@
                     mApplication, SLOT(delayedExitApplication()));
         }
     }
-#endif
 }
 
 
@@ -143,7 +137,9 @@
         modelIndex = mailboxListModel.index(i, 0);
         mailbox = mailboxListModel.data(modelIndex);
         mailboxMetaData = mailbox.value<NmMailboxMetaData*>();
-        currentId = mailboxMetaData->id();
+        if (mailboxMetaData) {
+            currentId = mailboxMetaData->id();        
+        }
 
         if (currentId.id() == mailboxId.id()) {
             // Found a mailbox with the matching ID.
--- a/emailuis/nmailui/src/nmmessagelistview.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmmessagelistview.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -20,11 +20,11 @@
 static const char *NMUI_MESSAGE_LIST_TREE_LIST = "MessageTreeList";
 static const char *NMUI_MESSAGE_LIST_NO_MESSAGES = "MessageListNoMessages";
 static const char *NMUI_MESSAGE_LIST_FOLDER_LABEL = "labelGroupBox";
-// Old sync icon implementation commented out but preserved so it could be put back if need be
-// static const char *NMUI_MESSAGE_LIST_SYNC_ICON = "syncIcon";
 
 #include "nmuiheaders.h"
 
+const QString syncIndicatorName = "com.nokia.nmail.indicatorplugin.sync/1.0";
+
 /*! 
 	\class NmMessageListView
 	\brief Message list view
@@ -52,23 +52,18 @@
 mLongPressedItem(NULL),
 mNoMessagesLabel(NULL),
 mFolderLabel(NULL),
-mSyncIcon(NULL),
 mViewReady(false),
 mCurrentFolderType(NmFolderInbox),
 mSettingsLaunched(false),
-mPreviousModelCount(0)
+mPreviousModelCount(0),
+mIsFirstSyncInMessageList(true)
 {
     NM_FUNCTION;
 
-    // Load view layout
     loadViewLayout();
-    //create toolbar
     createToolBar();
-    // Init tree view
     initTreeView();
-    // set title
     setMailboxName();
-    // Set folder name
     setFolderName();
 }
 
@@ -95,14 +90,11 @@
     NM_FUNCTION;
 
     // Use document loader to load the view
-    bool ok = false;
+    bool ok(false);
     setObjectName(QString(NMUI_MESSAGE_LIST_VIEW));
-    QObjectList objectList;
-    objectList.append(this);
     // Pass the view to documentloader. Document loader uses this view
     // when docml is parsed, instead of creating new view.
     if (mDocumentLoader) {
-        mDocumentLoader->setObjectTree(objectList);
         mWidgetList = mDocumentLoader->load(NMUI_MESSAGE_LIST_VIEW_XML, &ok);
     }
 
@@ -144,19 +136,11 @@
 
         mFolderLabel = qobject_cast<HbGroupBox *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_FOLDER_LABEL));
 
-        // Disable the old sync icon implementation for the time being (commment out loading the icon here)
-        //mSyncIcon = qobject_cast<HbLabel *>(mDocumentLoader->findWidget(NMUI_MESSAGE_LIST_SYNC_ICON));
-        if (mSyncIcon) {
-            mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline));
-        }
-
         // Connect options menu about to show to create options menu function
         QObject::connect(menu(), SIGNAL(aboutToShow()),
                          this, SLOT(createOptionsMenu()));
         QObject::connect(&mUiEngine, SIGNAL(syncStateEvent(NmSyncState, const NmId &)),
                          this, SLOT(handleSyncStateEvent(NmSyncState, const NmId &)));
-        QObject::connect(&mUiEngine, SIGNAL(connectionEvent(NmConnectState, const NmId &)),
-                                        this, SLOT(handleConnectionEvent(NmConnectState, const NmId &)));
 
         // Menu needs one dummy item so that aboutToShow signal is emitted.
         NmAction *dummy = new NmAction(0);
@@ -235,7 +219,7 @@
 /*!
     Reload view contents with new start parameters
     Typically when view is already open and external view activation occurs
-    for this same view
+    for this same view. Startparam ownership is transferred to this view
 */
 void NmMessageListView::reloadViewContents(NmUiStartParam* startParam)
 {
@@ -281,44 +265,38 @@
 {
     NM_FUNCTION;
 
-    NmId mailboxId = mMessageListModel->currentMailboxId();
-    if (mSyncIcon && mailboxId == mMessageListModel->currentMailboxId()) {
-        if (mUiEngine.syncState(mailboxId) == Synchronizing) {
-            mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconSynching));
-        }
-        else {
-            if (mUiEngine.connectionState(mailboxId) == Connected) {
-                mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline));
-            }
-            else {
-                mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline));
+    if (mMessageListModel) {
+        NmId mailboxId = mMessageListModel->currentMailboxId();    
+        // In each refresh, e.g. in folder change the UI signals
+        // lower layer about the folder that has been opened.
+        if (mStartParam){
+            mUiEngine.updateActiveFolder(mailboxId, mStartParam->folderId());
+            
+            NmFolderType folderType = mUiEngine.folderTypeById(mStartParam->mailboxId(),
+                                              mStartParam->folderId());
+            if (folderType == NmFolderInbox) { // If the new folder is an inbox, first automatic sync should be shown
+                mIsFirstSyncInMessageList = true; 
             }
         }
-    }
-
-    // In each refresh, e.g. in folder change the UI signals
-    // lower layer about the folder that has been opened.
-    if (mStartParam){
-        mUiEngine.updateActiveFolder(mailboxId, mStartParam->folderId());
-    }
 
-    // Set item model to message list widget
-    if (mMessageListWidget) {
-        mMessageListWidget->setModel(static_cast<QStandardItemModel*>(mMessageListModel));
-        QObject::connect(mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)),
-                this, SLOT(itemsAdded(const QModelIndex&,int,int)));
-        QObject::connect(mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)),
-                this, SLOT(itemsRemoved()));
-        QObject::connect(mMessageListModel, SIGNAL(setNewParam(NmUiStartParam*)),
-                this, SLOT(reloadViewContents(NmUiStartParam*)));
+        // Set item model to message list widget
+        if (mMessageListWidget) {
+            mMessageListWidget->setModel(static_cast<QStandardItemModel*>(mMessageListModel));
+            QObject::connect(mMessageListModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)),
+                    this, SLOT(itemsAdded(const QModelIndex&,int,int)));
+            QObject::connect(mMessageListModel, SIGNAL(rowsRemoved(const QModelIndex&,int,int)),
+                    this, SLOT(itemsRemoved()));
+            QObject::connect(mMessageListModel, SIGNAL(setNewParam(NmUiStartParam*)),
+                    this, SLOT(reloadViewContents(NmUiStartParam*)));
 
-        mPreviousModelCount=mMessageListModel->rowCount();
-        if (mPreviousModelCount==0){
-            showNoMessagesText();
-        }
-        else{
-            hideNoMessagesText();
-        }
+            mPreviousModelCount=mMessageListModel->rowCount();
+            if (mPreviousModelCount==0){
+                showNoMessagesText();
+            }
+            else{
+                hideNoMessagesText();
+            }
+        }    
     }
 }
 
@@ -328,11 +306,9 @@
 void NmMessageListView::handleSyncStateEvent(NmSyncState syncState, const NmId & mailboxId)
 {
     NM_FUNCTION;
-
-    if (mSyncIcon && mailboxId == mMessageListModel->currentMailboxId()) {
+    if (mMessageListModel && mailboxId == mMessageListModel->currentMailboxId()) {
         if (syncState == Synchronizing) {
-            mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconSynching));
-            // before first sync inbox id might be zero
+             // before first sync inbox id might be zero
             if (mStartParam->folderId() == 0) {
                 // after sync inbox id should be updated to correct value
                 NmId folderId = mUiEngine.standardFolderId(
@@ -340,35 +316,17 @@
                     NmFolderInbox);
                 mStartParam->setFolderId(folderId);
             }
-        }
-        else {
-            if (mUiEngine.connectionState(mailboxId) == Connected) {
-                mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline));
-            }
-            else {
-                mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline));
+            // Show sync icon only for the first automatic sync after opening message list.
+            // Sync icon for manual sync is shown in NmUiEngine::refreshMailbox, not here.
+            if (mIsFirstSyncInMessageList) {
+                HbIndicator indicator;
+                indicator.activate(syncIndicatorName, QVariant());
+                mIsFirstSyncInMessageList = false;
             }
         }
     }
 }
 
-/*!
-    Connection event handling
-*/
-void NmMessageListView::handleConnectionEvent(NmConnectState connectState, const NmId &mailboxId)
-{
-    NM_FUNCTION;
-
-    if (mSyncIcon && mailboxId == mMessageListModel->currentMailboxId() && mUiEngine.syncState(mailboxId) != Synchronizing) {
-        if (connectState == Connected) {
-            mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOnline));
-        }
-        else {
-            mSyncIcon->setIcon(NmIcons::getIcon(NmIcons::NmIconOffline));
-        }
-    }
-}
-
 /*! 
     folder selection handling within current mailbox
 */
--- a/emailuis/nmailui/src/nmmessagelistviewitem.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmmessagelistviewitem.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -236,21 +236,6 @@
 }
 
 /*!
-    paint. Paint function for line painting.
-*/
-void NmMessageListViewItem::paint(
-    QPainter *painter,
-    const QStyleOptionGraphicsItem *option,
-    QWidget *widget)
-{
-    NM_FUNCTION;
-    
-    Q_UNUSED(option);
-    Q_UNUSED(widget);
-    Q_UNUSED(painter);
-}
-
-/*!
     setFontsUnread
 */
 void  NmMessageListViewItem::setFontsUnread()
@@ -258,8 +243,8 @@
     NM_FUNCTION;
     
     static QColor colorRole = HbColorScheme::color("qtc_list_item_title_normal");
-    HbFontSpec spekki(HbFontSpec::Primary);
-    setFonts(colorRole, spekki);
+    HbFontSpec fontSpec(HbFontSpec::Primary);
+    setFonts(colorRole, fontSpec);
 }
 
 /*!
@@ -270,8 +255,8 @@
     NM_FUNCTION;
     
     static QColor colorRole = HbColorScheme::color("qtc_list_item_content_normal");
-    HbFontSpec spekki(HbFontSpec::Secondary);
-    setFonts(colorRole, spekki);
+    HbFontSpec fontSpec(HbFontSpec::Secondary);
+    setFonts(colorRole, fontSpec);
 }
 
 /*!
@@ -283,16 +268,15 @@
     
     // Get font sizes from style  
     qreal currentSize;
-    HbStyle mystyle;
-    bool found = mystyle.parameter(QString("hb-param-text-height-primary"), currentSize );
+    bool found = style()->parameter(QString("hb-param-text-height-primary"), currentSize );
     if (found) {
         mPrimarySize = currentSize;
     }      
-    found = mystyle.parameter(QString("hb-param-text-height-secondary"), currentSize );
+    found = style()->parameter(QString("hb-param-text-height-secondary"), currentSize );
     if (found) {
         mSecondarySize = currentSize;
     }        
-    found = mystyle.parameter(QString("hb-param-text-height-tiny"), currentSize );
+    found = style()->parameter(QString("hb-param-text-height-tiny"), currentSize );
     if (found) {
         mTinySize = currentSize;
     } 
@@ -302,7 +286,7 @@
     setFonts.
 */
 void  NmMessageListViewItem::setFonts(const QColor &colorRole, 
-        HbFontSpec &spekki)
+        HbFontSpec &fontSpec)
 {
     NM_FUNCTION;
     
@@ -310,21 +294,21 @@
     if (mSender && mSubject && mTime) {
         
         if (mPrimarySize) {
-            spekki.setTextHeight(mPrimarySize);
+            fontSpec.setTextHeight(mPrimarySize);
         }      
-        mSender->setFontSpec(spekki);
+        mSender->setFontSpec(fontSpec);
         mSender->setTextColor(colorRole);
         
         if (mSecondarySize) {
-            spekki.setTextHeight(mSecondarySize);
+            fontSpec.setTextHeight(mSecondarySize);
         }        
-        mSubject->setFontSpec(spekki);
+        mSubject->setFontSpec(fontSpec);
         mSubject->setTextColor(colorRole);
 
         if (mTinySize) {
-            spekki.setTextHeight(mTinySize);
+            fontSpec.setTextHeight(mTinySize);
         } 
-        mTime->setFontSpec(spekki);        
+        mTime->setFontSpec(fontSpec);        
         mTime->setTextColor(colorRole);
     }
 }
--- a/emailuis/nmailui/src/nmrecipientfield.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmrecipientfield.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -17,11 +17,11 @@
 
 #include "nmuiheaders.h"
 
-static const QString ContactsServiceName = "com.nokia.services.phonebookservices";
-static const QString ContactsInterfaceName = "Fetch";
-static const QString ContactsOperationName = "fetch(QString,QString,QString)";
+static const QString NmContactsServiceName = "com.nokia.services.phonebookservices";
+static const QString NmContactsInterfaceName = "Fetch";
+static const QString NmContactsOperationName = "fetch(QString,QString,QString)";
 
-static const int MaxRows = 10000;
+static const int NmMaxRows = 10000;
 
 /*!
    widget is created using AD/docml
@@ -46,12 +46,15 @@
 
     mRecipientsEditor = qobject_cast<NmRecipientLineEdit *>
         (mDocumentLoader.findWidget(mObjectPrefix + "Edit"));
-    mRecipientsEditor->setMaxRows(MaxRows);
+    if (mRecipientsEditor) {
+        mRecipientsEditor->setMaxRows(NmMaxRows);    
+    }
 
     mLaunchContactsPickerButton = qobject_cast<HbPushButton *>
         (mDocumentLoader.findWidget(mObjectPrefix + "Button"));
-
-    mLaunchContactsPickerButton->setIcon(NmIcons::getIcon(NmIcons::NmIconContacts));
+    if (mLaunchContactsPickerButton) {
+        mLaunchContactsPickerButton->setIcon(NmIcons::getIcon(NmIcons::NmIconContacts));    
+    }
 
     createConnections();
 }
@@ -73,10 +76,8 @@
         this, SIGNAL(selectionChanged()));
     connect(mLaunchContactsPickerButton, SIGNAL(pressed()),
             this, SIGNAL(launchContactsPickerButtonClicked()));
-
-#ifdef Q_OS_SYMBIAN
-    connect(mLaunchContactsPickerButton, SIGNAL(pressed()), this, SLOT(launchContactsPicker()));
-#endif
+    connect(mLaunchContactsPickerButton, SIGNAL(pressed()), 
+            this, SLOT(launchContactsPicker()));
 }
 
 
@@ -134,7 +135,6 @@
 }
 
 
-#ifdef Q_OS_SYMBIAN
 /*!
    This Slot launches the contacts-picker
 */
@@ -146,12 +146,12 @@
     XQAiwRequest *launchContactsPickerRequest;
     
     bool isEmbeded = true;
-    launchContactsPickerRequest = mAppmgr.create(ContactsServiceName, ContactsInterfaceName, 
-                                                 ContactsOperationName, isEmbeded);
+    launchContactsPickerRequest = mAppmgr.create(NmContactsServiceName, NmContactsInterfaceName, 
+                                                 NmContactsOperationName, isEmbeded);
     
     if (launchContactsPickerRequest) {
         connect(launchContactsPickerRequest, SIGNAL(requestOk(QVariant)),
-                mRecipientsEditor, SLOT(insertSelectedContacts(QVariant)));
+                mRecipientsEditor, SLOT(addSelectedContacts(QVariant)));
     }
     else {
         // Failed creating request 
@@ -172,6 +172,5 @@
     }
         
     delete launchContactsPickerRequest;
-    launchContactsPickerRequest = 0;
+    launchContactsPickerRequest = NULL;
 }
-#endif
--- a/emailuis/nmailui/src/nmsendserviceinterface.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmsendserviceinterface.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -58,7 +58,7 @@
     {
         NM_FUNCTION;
         
-        bool success = false;
+        bool success(false);
 
         if (data.canConvert(QVariant::Map)) {
             // The given data may contain a mail subject and recipient lists.
@@ -249,11 +249,7 @@
                                                QObject *parent,
                                                NmUiEngine &uiEngine,
                                                NmApplication *application)
-#ifndef NM_WINS_ENV
     : XQServiceProvider(interfaceName, parent),
-#else
-    : QObject(parent),
-#endif
       mApplication(application),
       mUiEngine(uiEngine),
       mAsyncReqId(0),
@@ -261,9 +257,7 @@
       mSelectionDialog(NULL),
       mCurrentView(NULL)
 {
-#ifndef NM_WINS_ENV
     publishAll();
-#endif
 }
 
 
@@ -311,17 +305,19 @@
 {
     NM_FUNCTION;
     
-#ifndef NM_WINS_ENV
+    HbMainWindow *mainWindow(NULL);
     
     // Make sure that qmail stays background if user presses back in editorview
-    mApplication->updateVisibilityState();
+    if (mApplication) {
+        mApplication->updateVisibilityState();
+        
+        mainWindow = mApplication->mainWindow();
+        mCurrentView = mainWindow->currentView();
     
-    HbMainWindow *mainWindow = mApplication->mainWindow();
-    mCurrentView = mainWindow->currentView();
-
-    // Hide the current view.
-    if (mCurrentView) {
-        mCurrentView->hide();
+        // Hide the current view.
+        if (mCurrentView) {
+            mCurrentView->hide();
+        }    
     }
 
     // Check the given data.
@@ -347,9 +343,9 @@
         cancelService();
     }
     else { // count > 0
-        // Make sure the NMail application is in the foreground.
-        XQServiceUtil::toBackground(false);
-        mainWindow->show();
+        if (mainWindow) {
+            mainWindow->show();        
+        }
 
     	mStartParam = new NmUiStartParam(
         	NmUiViewMessageEditor,
@@ -378,8 +374,9 @@
                 mSelectionDialog =
                     new NmMailboxSelectionDialog(mUiEngine.mailboxListModel());
             }
-            connect(mSelectionDialog,SIGNAL(selectionDialogClosed(NmId&)),
-                this,SLOT(selectionDialogClosed(NmId&)));
+
+            connect(mSelectionDialog, SIGNAL(selectionDialogClosed(NmId&)),
+                    this, SLOT(selectionDialogClosed(NmId&)));
             mSelectionDialog->open();
 
             // launch the editor when the dialog is closed
@@ -440,8 +437,4 @@
     }
 }
 
-#endif /* NM_WINS_ENV */
-
-
-
 // End of file.
--- a/emailuis/nmailui/src/nmuidocumentloader.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmuidocumentloader.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -40,7 +40,7 @@
 {
     NM_FUNCTION;
     
-    QObject *res = NULL;
+    QObject *res(NULL);
     if( type == NmMailViewerWK::staticMetaObject.className() ) {
         res = new NmMailViewerWK();
         res->setObjectName(name);
@@ -57,7 +57,7 @@
         res = new NmAttachmentListWidget();
         res->setObjectName(name);
     }    
-    if (res == NULL) {
+    if (!res) {
         res = HbDocumentLoader::createObject(type, name);
     }
     return res;
--- a/emailuis/nmailui/src/nmuieffects.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmuieffects.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -17,7 +17,7 @@
 
 #include "nmuiheaders.h"
 
-static const char *SendAnimation = ":/effects/mail_send.fxml";
+static const char *NmSendAnimation = ":/effects/mail_send.fxml";
 
 /*!
     \class NmEffects
@@ -55,32 +55,35 @@
     NM_FUNCTION;
     
     switch (effect) {
-    case NmEditorSendMessageAnimation:
-        // delete any existing stuff
-        resetSendAnimation();
-        
-        // This effect is for editor send message. Get the screen capture of
-        // editor view for animation which will be lauched soon.
-        mDoSendAnimation = true;
-
-        // take screen shot
-        mSendAnimationScreenShot = screenShot();
+        case NmEditorSendMessageAnimation: {
+            // delete any existing stuff
+            resetSendAnimation();
+            
+            // This effect is for editor send message. Get the screen capture of
+            // editor view for animation which will be lauched soon.
+            mDoSendAnimation = true;
+    
+            // take screen shot
+            mSendAnimationScreenShot = screenShot();
+            
+            if (mSendAnimationScreenShot){
+                // Create graphics item based pixmap image but don't show it yet.
+                mSendAnimationScreenShot->hide();
+                mSendAnimationScreenShot->setPos(0,0);
+                mSendAnimationScreenShot->setZValue(0);
         
-        // Create graphics item based pixmap image but don't show it yet.
-        mSendAnimationScreenShot->hide();
-        mSendAnimationScreenShot->setPos(0,0);
-        mSendAnimationScreenShot->setZValue(0);
-
-        // Adds or moves the item and all its childen to this scene.
-        // This scene takes ownership of the item.
-        mMainWindow.scene()->addItem(mSendAnimationScreenShot);
-
-        // Set editor screen capture visible before old view is popped.
-        // New view is drawn under this image.
-        mSendAnimationScreenShot->show();
-
-        HbEffect::add(mSendAnimationScreenShot, SendAnimation, "mail_send");
-        break;
+                // Adds or moves the item and all its childen to this scene.
+                // This scene takes ownership of the item.
+                mMainWindow.scene()->addItem(mSendAnimationScreenShot);
+        
+                // Set editor screen capture visible before old view is popped.
+                // New view is drawn under this image.
+                mSendAnimationScreenShot->show();
+        
+                HbEffect::add(mSendAnimationScreenShot, NmSendAnimation, "mail_send");        
+            }
+            break;
+        }
     }
 }
 
@@ -92,14 +95,15 @@
     NM_FUNCTION;
     
     switch (effect) {
-    case NmEditorSendMessageAnimation:
-        // Send message animation for editor view.
-        if (mDoSendAnimation && mSendAnimationScreenShot) {
-            mDoSendAnimation = false;
-            // Start animation and connect completion signal to sendAnimationComplete slot.
-            HbEffect::start(mSendAnimationScreenShot, "mail_send", this, "sendAnimationComplete");
+        case NmEditorSendMessageAnimation: {
+            // Send message animation for editor view.
+            if (mDoSendAnimation && mSendAnimationScreenShot) {
+                mDoSendAnimation = false;
+                // Start animation and connect completion signal to sendAnimationComplete slot.
+                HbEffect::start(mSendAnimationScreenShot, "mail_send", this, "sendAnimationComplete");
+            }
+            break;
         }
-        break;
     }
 }
 
@@ -113,8 +117,7 @@
     
     // Grab whole view into pixmap image (also chrome is included)
     QPixmap screenCapture = QPixmap::grabWindow(mMainWindow.internalWinId());
-
-    QGraphicsPixmapItem *ret = NULL;
+    QGraphicsPixmapItem *ret(NULL);
     
     // for landscape, the screenshot must be rotated
     if(mMainWindow.orientation() == Qt::Horizontal) {
@@ -138,7 +141,7 @@
     
     if (mSendAnimationScreenShot) {
         // Clean send animation
-        HbEffect::remove(mSendAnimationScreenShot, SendAnimation, "mail_send");
+        HbEffect::remove(mSendAnimationScreenShot, NmSendAnimation, "mail_send");
         // Ownership of QGraphicsPixmapItem is tranferred to GraphicsScene when it has been added
         // to it GraphicsScene.
         // GraphicsPixmapItem needs to be removed from the GraphicsScene before deleting
--- a/emailuis/nmailui/src/nmuiextensionmanager.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmuiextensionmanager.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -17,13 +17,13 @@
 
 #include "nmuiheaders.h"
 
+static const QString NmSettingsPluginFolderPath("/resource/qt/plugins/nmail/uiext");
+
 /*!
     \class NmUiExtensionManager
     \brief Handles ui extension plugins
  */
 
-// ======== HELPER FUNCTIONS ========
-
 /*!
   Creates list of folder paths where plug-ins can be loaded from.
   \return folder path list.
@@ -32,7 +32,6 @@
 {
     NM_FUNCTION;
     
-    const QString NmSettingsPluginFolderPath("/resource/qt/plugins/nmail/uiext");
     QStringList pluginDirectories;
     QFileInfoList driveList = QDir::drives();
 
@@ -81,7 +80,7 @@
     NM_FUNCTION;
     
     for (int i = 0; i < mExtensions.count(); i++) {
-    	NmUiExtensionInterface* interface = mExtensions[i];
+    	NmUiExtensionInterface *interface = mExtensions[i];
         interface->getActions(menuRequest, actionList);
     }
 }
@@ -107,7 +106,7 @@
         }
     }
     
-    NmUiExtensionInterface *interface = NULL;    
+    NmUiExtensionInterface *interface(NULL);    
     foreach (QPluginLoader *loader, mPluginLoaders) {      
         NM_COMMENT(QString("Plugin fileName() : %1").arg(loader->fileName()));
         QString fileName = loader->fileName();        
--- a/emailuis/nmailui/src/nmuriserviceinterface.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmuriserviceinterface.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -17,7 +17,6 @@
 */
 
 //  INCLUDES
-#include <xqaiwdecl.h>
 #include "nmuiheaders.h"
 
 /*!
@@ -32,10 +31,10 @@
         Class constructor.
     */
     inline NmStartParamDataHelper()
-    : mSubject(0),
-      mToAddresses(0),
-      mCcAddresses(0),
-      mBccAddresses(0)
+    : mSubject(NULL),
+      mToAddresses(NULL),
+      mCcAddresses(NULL),
+      mBccAddresses(NULL)
     {
         NM_FUNCTION;
     }
@@ -57,7 +56,7 @@
     {
         NM_FUNCTION;
         
-        bool success = false;
+        bool success(false);
         
         QUrl uri(data);
         
@@ -165,11 +164,7 @@
 NmUriServiceInterface::NmUriServiceInterface(QObject *parent,
                                                NmUiEngine &uiEngine,
                                                NmApplication *application)
-#ifndef NM_WINS_ENV
     : XQServiceProvider(emailServiceName+"."+XQI_URI_VIEW, parent),
-#else
-    : QObject(parent),
-#endif
       mApplication(application),
       mUiEngine(uiEngine),
       mAsyncReqId(0),
@@ -177,9 +172,7 @@
       mSelectionDialog(NULL),
       mCurrentView(NULL)
 {
-#ifndef NM_WINS_ENV
     publishAll();
-#endif
 }
 
 
@@ -221,14 +214,17 @@
 bool NmUriServiceInterface::view(const QString& uri)
 {
     NM_FUNCTION;
-    
-#ifndef NM_WINS_ENV
-    
-    // Make sure that nmail stays background if user presses back in editorview
-    mApplication->updateVisibilityState();
-    
-    HbMainWindow *mainWindow = mApplication->mainWindow();
-    mCurrentView = mainWindow->currentView();
+      
+    HbMainWindow *mainWindow(NULL);
+    if (mApplication) {
+        // Make sure that nmail stays background if user presses back in editorview
+        mApplication->updateVisibilityState();
+        
+        mainWindow = mApplication->mainWindow();
+        if (mainWindow) {
+            mCurrentView = mainWindow->currentView();  
+        } 
+    }
 
     // Hide the current view.
     if (mCurrentView) {
@@ -260,7 +256,9 @@
     else { // count > 0
         // Make sure the NMail application is in the foreground.
         XQServiceUtil::toBackground(false);
-        mainWindow->show();
+        if (mainWindow) {
+            mainWindow->show();        
+        }
 
     	mStartParam = new NmUiStartParam(
         	NmUiViewMessageEditor,
@@ -353,8 +351,4 @@
     }
 }
 
-#endif /* NM_WINS_ENV */
-
-
-
 // End of file.
--- a/emailuis/nmailui/src/nmutilities.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmutilities.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -18,9 +18,9 @@
 #include "nmuiheaders.h"
 
 static const int NmMegabyte = 1048576;
-
+static const qreal NmMinAttachmentSize = 0.1;
 // taken from http://www.regular-expressions.info/email.html
-static const QRegExp EmailAddressPattern("[A-Za-z\\d!#$%&'*+/=?^_`{|}~-]+"
+static const QRegExp NmEmailAddressPattern("[A-Za-z\\d!#$%&'*+/=?^_`{|}~-]+"
                                          "(?:"
                                          "\\."
                                          "[A-Za-z\\d!#$%&'*+/=?^_`{|}~-]+"
@@ -48,44 +48,47 @@
 {
     NM_FUNCTION;
 
+    // Get envelope from message
+    const NmMessageEnvelope &env = message.envelope();
+    
     // validate TO addresses
-    QList<NmAddress> toRecipients = message.envelope().toRecipients();
+    QList<NmAddress> toRecipients = env.toRecipients();
     int recipientCount = toRecipients.count();
 
     for (int i = 0; i < recipientCount; ++i) {
         bool validAddress = isValidEmailAddress(toRecipients.at(i).address());
 
-        if (type == Default ||
-            type == ValidAddress && validAddress ||
-            type == InvalidAddress && !validAddress) {
+        if (type == NmDefault ||
+            type == NmValidAddress && validAddress ||
+            type == NmInvalidAddress && !validAddress) {
             recipients.append(toRecipients.at(i));
         }
     }
 
     // validate CC addresses
-    QList<NmAddress> ccRecipients = message.envelope().ccRecipients();
+    QList<NmAddress> ccRecipients = env.ccRecipients();
     recipientCount = ccRecipients.count();
 
     for (int i = 0; i < recipientCount; ++i) {
         bool validAddress = isValidEmailAddress(ccRecipients.at(i).address());
 
-        if (type == Default ||
-            type == ValidAddress && validAddress ||
-            type == InvalidAddress && !validAddress) {
+        if (type == NmDefault ||
+            type == NmValidAddress && validAddress ||
+            type == NmInvalidAddress && !validAddress) {
             recipients.append(ccRecipients.at(i));
         }
     }
 
     // validate BCC addresses
-    QList<NmAddress> bccRecipients = message.envelope().bccRecipients();
+    QList<NmAddress> bccRecipients = env.bccRecipients();
     recipientCount = bccRecipients.count();
 
     for (int i = 0; i < recipientCount; ++i) {
         bool validAddress = isValidEmailAddress(bccRecipients.at(i).address());
 
-        if (type == Default ||
-            type == ValidAddress && validAddress ||
-            type == InvalidAddress && !validAddress) {
+        if (type == NmDefault ||
+            type == NmValidAddress && validAddress ||
+            type == NmInvalidAddress && !validAddress) {
             recipients.append(bccRecipients.at(i));
         }
     }
@@ -98,7 +101,7 @@
 {
     NM_FUNCTION;
 
-    return EmailAddressPattern.exactMatch(emailAddress);
+    return NmEmailAddressPattern.exactMatch(emailAddress);
 }
 
 /*!
@@ -128,9 +131,9 @@
 {
     NM_FUNCTION;
 
-    bool foundAddress = false;
+    bool foundAddress(false);
 
-    QRegExp rx(EmailAddressPattern);
+    QRegExp rx(NmEmailAddressPattern);
     // locate the email address in the string
     int pos = rx.indexIn(emailAddress);
     if (pos != -1) {
@@ -169,7 +172,7 @@
 }
 
 /*!
-  Opens file specified by RFile handle. Usually used by viewer
+  Opens file specified by XQSharableFile handle. Usually used by viewer
   for opening attachments from message store as RFiles
 */
 int NmUtilities::openFile(XQSharableFile &file)
@@ -243,10 +246,10 @@
     NM_FUNCTION;
 
     qreal sizeMb = (qreal)sizeInBytes / (qreal)NmMegabyte;
-    if (sizeMb < 0.1) {
-        // 0.1 Mb is the minimum size shown for attachment
-        sizeMb = 0.1;
-    }
+    if (sizeMb < NmMinAttachmentSize) {
+        // NmMinAttachmentSize (0.1Mb) is the minimum size shown for attachment
+        sizeMb = NmMinAttachmentSize;
+    }   
     return QString().sprintf("(%.1f Mb)", sizeMb); // Use loc string when available
 }
 
--- a/emailuis/nmailui/src/nmviewerheader.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerheader.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -11,14 +11,14 @@
 *
 * Contributors:
 *
-* Description:
+* Description: NMail viewer view header widget implementation
 *
 */
 
 
 #include "nmuiheaders.h"
 
-static const qreal nmHeaderLineOpacity = 0.4;
+static const qreal NmHeaderLineOpacity = 0.4;
 
 /*!
     \class NmViewerHeader
@@ -119,7 +119,7 @@
     Q_UNUSED(widget);
     if (painter) {
         painter->save();
-        painter->setOpacity(nmHeaderLineOpacity);
+        painter->setOpacity(NmHeaderLineOpacity);
         QLineF line1( rect().topLeft().x(), rect().bottomRight().y(),
                      rect().bottomRight().x(), rect().bottomRight().y());
         painter->drawLine(line1);
@@ -160,7 +160,7 @@
         // Set recipients to text edit field as html 
         NmAddress sender = mMessage->envelope().sender();      
         if (mRecipientsBox){  
-            mRecipientsBox->setHtml(formatRecipientList(addressToDisplayInHtml(sender),
+            mRecipientsBox->setHtml(formatRecipientList(addressToDisplay(sender),
                                     mMessage->envelope().toRecipients(), 
                                     mMessage->envelope().ccRecipients()));
         }       
@@ -272,7 +272,7 @@
         // Set recipients to text edit field as html 
         NmAddress sender = mMessage->envelope().sender();               
         if (mMessage) {
-            mRecipientsBox->setHtml(formatRecipientList(addressToDisplayInHtml(sender),
+            mRecipientsBox->setHtml(formatRecipientList(addressToDisplay(sender),
                                     mMessage->envelope().toRecipients(), 
                                     mMessage->envelope().ccRecipients()));
         }
@@ -294,8 +294,8 @@
     
     QString result;
     result.append("<html><body link=\"blue\" topmargin=\"0\" leftmargin=\"0\" marginheight=\"0\"");
-    result.append("marginwidth=\"0\" bgcolor=\"white\" text=\"black\">");    
-    result.append("<font color=\"black\" face=\"");
+    result.append("marginwidth=\"0\">");    
+    result.append("<font face=\"");
     result.append("Nokia Sans");
     result.append("\"size=\"3\">"); 
     // Set text in HTML format based on layout direction
@@ -309,7 +309,7 @@
         result.append(" </b>");
         int reciCount = to.count();
         for (int i=0; i < reciCount; i++) { 
-            result.append(addressToDisplayInHtml(to[i]));
+            result.append(addressToDisplay(to[i]));
             result.append(" ");
         } 
         reciCount = cc.count();
@@ -318,7 +318,7 @@
             result.append(hbTrId("txt_mail_list_cc"));
             result.append(" </b>");
             for (int i=0; i < reciCount; i++) {
-                result.append(addressToDisplayInHtml(cc[i]));
+                result.append(addressToDisplay(cc[i]));
                 result.append(" "); 
             }
         }   
@@ -333,7 +333,7 @@
         result.append(" </b>");
         int reciCount = to.count();
         for (int i=0; i < reciCount; i++) { 
-            result.append(addressToDisplayInHtml(to[i]));
+            result.append(addressToDisplay(to[i]));
             result.append("; ");
         }
         reciCount = cc.count();
@@ -342,7 +342,7 @@
             result.append(hbTrId("txt_mail_list_cc"));
             result.append(" </b>");
             for (int i=0; i < reciCount; i++) {
-                result.append(addressToDisplayInHtml(cc[i]));
+                result.append(addressToDisplay(cc[i]));
                 result.append("; ");
             }
         }   
@@ -355,7 +355,7 @@
     Function retursn address string from NmAddress to
     be displayed in HTML format
 */
-QString NmViewerHeader::addressToDisplayInHtml(const NmAddress &addr)
+QString NmViewerHeader::addressToDisplay(const NmAddress &addr)
 {
     NM_FUNCTION;
     
--- a/emailuis/nmailui/src/nmviewerserviceinterface.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerserviceinterface.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -31,18 +31,12 @@
 NmViewerServiceInterface::NmViewerServiceInterface(QObject *parent,
         NmApplication *application,
         NmUiEngine &uiEngine)
-#ifndef NM_WINS_ENV
     : XQServiceProvider(emailFullServiceNameMessage, parent),
-#else
-    : QObject(parent),
-#endif
       mApplication(application),
       mUiEngine(uiEngine),
       mAsyncReqId(0)
 {
-#ifndef NM_WINS_ENV
     publishAll();
-#endif
 }
 
 
@@ -62,7 +56,6 @@
 {
     NM_FUNCTION;
 
-#ifndef NM_WINS_ENV
     mAsyncReqId = setCurrentRequestAsync();
 
     NmId mailboxNmId(mailboxId.toULongLong());
@@ -122,7 +115,6 @@
                     mApplication, SLOT(delayedExitApplication()));
         }
     }
-#endif
 }
 
 // End of file.
--- a/emailuis/nmailui/src/nmviewerview.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerview.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -72,7 +72,7 @@
 mViewReady(false),
 mWaitNoteCancelled(false),
 mErrorNote(NULL)
-    {
+{
     // Create documentloader
     mDocumentLoader = new NmUiDocumentLoader(mMainWindow);
     // Get screensize
@@ -117,6 +117,7 @@
     // View is about to exit, for safety, stop 
     // loading of content before closing the view
     if (mWebView){
+        mAttaManager.cancelFetch();
         mWebView->stop();
         if (mWebView->page()){
             mWebView->page()->deleteLater();
@@ -132,14 +133,11 @@
     NM_FUNCTION;
     
     // Use document loader to load the view
-    bool ok = false;
+    bool ok(false);
     setObjectName(QString(NMUI_MESSAGE_VIEWER_VIEW));
-    QObjectList objectList;
-    objectList.append(this);
     // Pass the view to documentloader. Document loader uses this view
     // when docml is parsed, instead of creating new view.
     // documentloader is created in constructor
-    mDocumentLoader->setObjectTree(objectList);
     mWidgetList = mDocumentLoader->load(NMUI_MESSAGE_VIEWER_XML, &ok);
     int widgetCount = mWidgetList.count();
     if (ok == true && widgetCount)
@@ -385,8 +383,9 @@
   	// if everything is ok, set message to html viewer
     if (mMessage && mWebView && page) {
         // Set initial size of component and content before loading data
-        mWebView->setMaximumWidth(mScreenSize.width());
-        page->setPreferredContentsSize(mScreenSize);
+        mWebView->setPreferredWidth(mScreenSize.width());
+        QRectF myGeometry = geometry();
+        page->setViewportSize(myGeometry.size().toSize());
         //Set message data to html viewer.
         mWebView->setHtml(formatMessage());
         // Connect to link clicked
@@ -416,7 +415,7 @@
         // Set attawidget minimum & maximum size
         mAttaWidget->setMinimumWidth(mScreenSize.width());
         mAttaWidget->setMaximumWidth(mScreenSize.width());
-        bool inserted = false;
+        bool inserted(false);
         QList<NmMessagePart*> messageParts;
         mMessage->attachmentList(messageParts);
         for (int i = 0; i < messageParts.count();i++) {
@@ -481,6 +480,7 @@
         }
         // attachment is fetched, open file
         else if (messageParts[i]->partId() == attaId) {
+            mAttaManager.cancelFetch();
             XQSharableFile file = mUiEngine.messagePartFile(mailboxId, folderId,
                                                             messageId, attaId);
             int error = NmUtilities::openFile(file);
@@ -637,18 +637,17 @@
     // same size value is received more than once.
     if (size != mLatestLoadingSize) {
         if (!webFrameloadingCompleted && mWebView && mWebView->page() &&
-            (size.width() > mScreenSize.width() || size.height() > mScreenSize.height())) {
+            (size.width() > mScreenSize.width() || size.height() > geometry().height())) {
             int width = (int)size.width();
             int height = (int)size.height();
             // Set content (webview) width
             if (mDisplayingPlainText){
-                setWebViewWidth(mScreenSize.width());
+                mWebView->setPreferredWidth(geometry().width());           
             }
             else {
-                setWebViewWidth(width);
+                mWebView->setPreferredWidth(width);
             }
-            mWebView->setMinimumHeight(height);
-            mWebView->setPreferredHeight(height);
+            mWebView->setPreferredHeight(height);        
         }
     }
     mLatestLoadingSize = size;
@@ -659,33 +658,17 @@
 */
 void NmViewerView::scaleWebViewWhenLoaded()
 {
-    if (mWebView&&mWebView->page()) {
+    QRectF myGeometry = geometry();
+    if (mWebView && mWebView->page()) {
+        mWebView->page()->setViewportSize(myGeometry.size().toSize());
         QSizeF contentSize = mWebView->page()->mainFrame()->contentsSize();
         int width = (int)contentSize.width();
-        int height = (int)contentSize.height();
-        // Set content (webview) width
-        if (mDisplayingPlainText) {
-            mWebView->page()->setPreferredContentsSize(mScreenSize);
-            setWebViewWidth(mScreenSize.width());
-        } else {
-            setWebViewWidth(width);
-        }
-        // Set content (webview) height
-        if (mScrollAreaContents){
-            QRectF contentRect = mScrollAreaContents->geometry();
-            if (contentRect.height()<geometry().height()){
-                contentRect.setHeight(geometry().height());
-                mViewerContent->setPreferredHeight(contentRect.height());
-                qreal webViewHeight = geometry().height()-mHeaderWidget->geometry().height();
-                setWebViewHeighth(webViewHeight);
-            } else {
-                setWebViewHeighth(height);
-            }
-        }
+        int height = (int)contentSize.height();  
+        mWebView->setPreferredWidth(width);
+        mWebView->setPreferredHeight(height);
     }
 }
 
-
 /*!
     Set new dimensions after orientation change.
 */
@@ -701,31 +684,8 @@
         // Set attawidget minimum & maximum size
         mAttaWidget->setMinimumWidth(mScreenSize.width());
         mAttaWidget->setMaximumWidth(mScreenSize.width());
-    }
-
-    // Scale web view and its contens
-    if (mWebView){
-        if (mDisplayingPlainText){
-            mWebView->setMaximumWidth((int)mScreenSize.width());
-            mWebView->page()->setPreferredContentsSize(QSize((int)mScreenSize.width(),
-                                           (int)mScreenSize.height()));
-        }
-        else{
-            // Check whether contentsize fits to screen
-            // and if not, set preferred size again to allow panning
-            QSizeF contentSize = mWebView->page()->mainFrame()->contentsSize();
-            if (contentSize.width()>mScreenSize.width()){
-                mWebView->setMaximumWidth((int)contentSize.width());
-                mWebView->page()->setPreferredContentsSize(QSize((int)contentSize.width(),
-                                                           (int)contentSize.height()));
-            }
-            else{
-                mWebView->setMaximumWidth((int)mScreenSize.width());
-                mWebView->page()->setPreferredContentsSize(QSize((int)mScreenSize.width(),
-                                               (int)mScreenSize.height()));
-            }
-        }
-    }
+    }    
+    scaleWebViewWhenLoaded();
 
     if (mToolbarEnabled) {
 		// Re-create toolbar in orientation switch
@@ -733,7 +693,6 @@
     }
 }
 
-
 /*!
    Screen orientation changed. Web view needs to be scaled when
    landscape <-> portrait switch occurs because text needs to
@@ -752,25 +711,28 @@
 {
     NM_FUNCTION;
     
-      if (link.scheme() == "http" ||
-          link.scheme() == "https" ) {
-          QDesktopServices::openUrl(link);
-      }
-      else if (link.scheme() == "mailto"){
-          QList<NmAddress*> *addrList = new QList<NmAddress*>();
-          NmAddress *mailtoAddr = new NmAddress();
-          QString address = link.toString(QUrl::RemoveScheme);
-          mailtoAddr->setAddress(address);
-          mailtoAddr->setDisplayName(address);
-          addrList->append(mailtoAddr);
-          // Create start parameters. Address list ownership
-          // is transferred to startparam object
-          NmUiStartParam* param = new NmUiStartParam(NmUiViewMessageEditor,
-                                                     mStartParam->mailboxId(),
-                                                      mStartParam->folderId(),
-                                                     0, NmUiEditorMailto, addrList );
-          mApplication.enterNmUiView(param);
-      }
+    if (link.scheme() == "http" ||
+        link.scheme() == "https" ) {
+        mAttaManager.cancelFetch();
+        QDesktopServices::openUrl(link);
+    } else if (link.scheme() == "mailto"){
+        mAttaManager.cancelFetch();
+        QList<NmAddress*> *addrList = new QList<NmAddress*>();
+        NmAddress *mailtoAddr = new NmAddress();
+        QString address = link.toString(QUrl::RemoveScheme);
+        mailtoAddr->setAddress(address);
+        mailtoAddr->setDisplayName(address);
+        addrList->append(mailtoAddr);
+        // Create start parameters. Address list ownership
+        // is transferred to startparam object
+        NmUiStartParam* param = new NmUiStartParam(NmUiViewMessageEditor,
+                                                   mStartParam->mailboxId(),
+                                                   mStartParam->folderId(),
+                                                   0,
+                                                   NmUiEditorMailto,
+                                                   addrList);
+        mApplication.enterNmUiView(param);
+    }    
 }
 
 /*!
@@ -934,6 +896,7 @@
     	actionResponse.menuType() == NmActionToolbar) {
         switch (actionResponse.responseCommand()) {
             case NmActionResponseCommandReply: {
+                mAttaManager.cancelFetch();
                 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor,
                     mStartParam->mailboxId(), mStartParam->folderId(),
                     mStartParam->messageId(), NmUiEditorReply);
@@ -941,6 +904,7 @@
             }
             break;
             case NmActionResponseCommandReplyAll: {
+                mAttaManager.cancelFetch();
                 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor,
                     mStartParam->mailboxId(), mStartParam->folderId(),
                     mStartParam->messageId(), NmUiEditorReplyAll);
@@ -948,6 +912,7 @@
             }
             break;
             case NmActionResponseCommandForward: {
+                mAttaManager.cancelFetch();
                 NmUiStartParam *startParam = new NmUiStartParam(NmUiViewMessageEditor,
                     mStartParam->mailboxId(), mStartParam->folderId(),
                     mStartParam->messageId(), NmUiEditorForward);
@@ -955,6 +920,7 @@
             }
             break;
             case NmActionResponseCommandDeleteMail: {
+                mAttaManager.cancelFetch();
                 deleteMessage();
                 }
             break;
@@ -1047,25 +1013,3 @@
     // Display wait dialog
     mWaitDialog->show(); 
 }
-
-/*!
-    Helper function for width.
-*/
-void NmViewerView::setWebViewWidth(int width)
-{
-    // null pointer check for mWebView in calling function
-    mWebView->setMinimumWidth(width);
-    mWebView->setMaximumWidth(width);
-    mWebView->setPreferredWidth(width);
-}
-
-/*!
-    Helper function for heigth.
-*/
-void NmViewerView::setWebViewHeighth(int height)
-{
-    // null pointer check for mWebView in calling function
-    mWebView->setMinimumHeight(height);
-    mWebView->setMaximumHeight(height);
-    mWebView->setPreferredHeight(height);
-}
--- a/emailuis/nmailui/src/nmviewerviewnetmanager.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerviewnetmanager.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -73,12 +73,12 @@
         && requestUrl.scheme()==NmViewerViewNetManagerScheme) {
         QString id = requestUrl.path();
         NmId partId;
-        bool isFetched = false;
+        bool isFetched(false);
         NmMessage *message = mMessageView->message();
         if (message) {
             QVariant data = mMessageView->webView()->loadResource(
                     QTextDocument::ImageResource, requestUrl, partId, isFetched);
-            NmViewerViewNetReply* reply = NULL;
+            NmViewerViewNetReply* reply(NULL);
             if (isFetched) {
                 reply = new NmViewerViewNetReply(data, mUiEngine);
             }
--- a/emailuis/nmailui/src/nmviewerviewnetreply.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerviewnetreply.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -94,6 +94,9 @@
     // Insert embedded images into cache manually
     if(manager()) {
         if(manager()->cache() && request().url().scheme() == NMUI_NET_REPLY_CONTENT_ID) {
+            // Store url to use for reply in access manager finished emitting. 
+            setUrl(request().url());
+            
             // Metadata required for inserted data
             QNetworkCacheMetaData metaData;
             metaData.setUrl(request().url());
@@ -120,7 +123,7 @@
     NM_FUNCTION;
     
     Q_UNUSED(result);
-    NmMessage *message = NULL;
+    NmMessage *message(NULL);
     message = mUiEngine.message(
             mMailboxId,
             mFolderId,
@@ -128,7 +131,7 @@
     if (message) {
         QList<NmMessagePart*> partList;
         message->attachmentList(partList);
-        NmMessagePart *part = NULL;
+        NmMessagePart *part(NULL);
         for (int i = 0; !part && i < partList.count(); i++) {
             if (partList[i]->partId() == mMessagePartId) {
                 part = partList[i];
--- a/emailuis/nmailui/src/nmviewerwebview.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/src/nmviewerwebview.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -21,11 +21,16 @@
     Constructor.
 */
 NmMailViewerWK::NmMailViewerWK()
-: QGraphicsWebView()
+: QGraphicsWebView(),
+  mContent(),
+  mParentView(NULL),
+  mSuppressRelease(false)
 {
+    // Subscribe this widget to tap and pinch gestures.
+    grabGesture(Qt::TapGesture);
     grabGesture(Qt::PinchGesture);
-    installEventFilter(new NmEventFilterWK(this));
-    setFlag(QGraphicsItem::ItemIsFocusable,false);
+    // Prevent this widget from accepting focus.
+    setFocusPolicy(Qt::NoFocus);
 }
 
 /*!
@@ -75,36 +80,29 @@
 }
 
 /*!
-    Filter class' constructor.
+    This is the main event handler that processes all incoming events in an
+    appropriate manner.
  */
-NmEventFilterWK::NmEventFilterWK(QObject* parent)
-: QObject(parent)
+bool NmMailViewerWK::event(QEvent* event)
 {
-}
-
-/*
-    Filters events if this object has been installed as an event filter.
- */
-bool NmEventFilterWK::eventFilter(QObject* object, QEvent* event) {
-    Q_UNUSED(object);
     bool consumed = false;
     if (event) {
         switch (event->type()) {
         case QEvent::Gesture:
-            consumed = gestureEvent(static_cast<QGestureEvent*>(event));
-            break;
-        case QEvent::GraphicsSceneMouseDoubleClick:
-            // Handle double click (instant zoom).
-            // At the moment we simply consume the event.
-            event->accept();
-            consumed = true;
+            // Handle gesture events.
+            gestureEvent(static_cast<QGestureEvent*>(event));
+            consumed = event->isAccepted();
             break;
         case QEvent::GraphicsSceneContextMenu:
-        case QEvent::GraphicsSceneMouseMove:
-            event->accept();
-            consumed = true;
+            // Handle context-menu events.
+            // contextMenuEvent() is invoked directly in order to override
+            // text selection in QWebPage.
+            contextMenuEvent(static_cast<QGraphicsSceneContextMenuEvent*>(event));
+            consumed = event->isAccepted();
             break;
         default:
+            // Invoke base class' event handler.
+            consumed = QGraphicsWebView::event(event);
             break;
         }
     }
@@ -112,18 +110,78 @@
 }
 
 /*!
-    Handles gesture events. This function is invoked by the eventFilter()
-    function in case of gesture events.
+    Handles context-menu events.
+ */
+void NmMailViewerWK::contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
+{
+    if (event) {
+        // Suppress context-menu invocations.
+        event->accept();
+    }
+}
+
+/*!
+    Handles gesture events.
  */
-bool NmEventFilterWK::gestureEvent(QGestureEvent* event) {
-    bool consumed = false;
+void NmMailViewerWK::gestureEvent(QGestureEvent* event)
+{
     if (event) {
+        if (QTapGesture* tap = static_cast<QTapGesture*>(event->gesture(Qt::TapGesture))) {
+            switch (tap->state()) {
+            case Qt::GestureCanceled:
+                // Tap cancellation suppresses the following mouse release.
+                mSuppressRelease = true;
+                break;
+            default:
+                // Other states disclose the following mouse release.
+                mSuppressRelease = false;
+                break;
+            }
+            event->accept();
+        }
         if (QPinchGesture* pinch = static_cast<QPinchGesture*>(event->gesture(Qt::PinchGesture))) {
             // Handle pinch (zoom).
             // At the moment we simply consume the event.
             event->accept();
-            consumed = true;
         }
     }
-    return consumed;
+}
+
+/*!
+    Handles double-click events.
+ */
+void NmMailViewerWK::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
+{
+    if (event) {
+        // Handle double clicks (instant zoom).
+        // At the moment we simply consume the event.
+        event->accept();
+    }
 }
+
+/*!
+    Handles mouse-move events.
+ */
+void NmMailViewerWK::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
+{
+    if (event) {
+        // Suppress drag selection.
+        event->accept();
+    }
+}
+
+/*!
+    Handles mouse-release events.
+ */
+void NmMailViewerWK::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
+{
+    if (event) {
+        // Suppress mouse release if the previous tap was cancelled.
+        // Otherwise, invoke the base class' event handler.
+        if (mSuppressRelease) {
+            event->accept();
+        } else {
+            QGraphicsWebView::mouseReleaseEvent(event);
+        }
+    }
+}
Binary file emailuis/nmailui/translations/mail.qm has changed
--- a/emailuis/nmailui/translations/mail.ts	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailui/translations/mail.ts	Thu Jun 24 14:32:18 2010 +0300
@@ -426,7 +426,7 @@
     <comment>Secondary text for status menu item: indicates the there are new mail messages</comment>        
     <source>New Mail</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id></extra-loc-layout_id>    
+    <extra-loc-layout_id>qtl_notifdialog_sec_medium_graphic</extra-loc-layout_id>    
     <extra-loc-viewid>mail_01_d</extra-loc-viewid>
     <extra-loc-positionid>list</extra-loc-positionid>
     <extra-loc-feature>mail</extra-loc-feature>
@@ -682,6 +682,16 @@
     <extra-loc-feature>mail</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
+<message numerus="no" id="txt_mail_select_contacts">
+    <comment>Title text shown in status pane when contacts are fetched from Phonebook.</comment>        
+    <source>Select contacts</source>
+    <translation variants="no" type="unfinished"></translation>
+    <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>    
+    <extra-loc-viewid>mail</extra-loc-viewid>
+    <extra-loc-positionid>dpophead</extra-loc-positionid>
+    <extra-loc-feature>mail</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
 <message numerus="no" id="txt_mail_dialog_no">
     <comment>Button for notes txt_mail_dialog_server_settings_incorrect and txt_mail_dialog_address_or_password_incorrect.</comment>        
     <source>No</source>
--- a/emailuis/nmailuiengine/bwins/nmailuiengineu.def	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiengine/bwins/nmailuiengineu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -69,246 +69,247 @@
 	?sendMail@NmBaseClientPlugin@@QAEXXZ @ 68 NONAME ; void NmBaseClientPlugin::sendMail(void)
 	?insertNewMessageIntoModel@NmMessageListModel@@AAEXABVNmId@@00@Z @ 69 NONAME ; void NmMessageListModel::insertNewMessageIntoModel(class NmId const &, class NmId const &, class NmId const &)
 	?getStaticMetaObject@NmUiEngine@@SAABUQMetaObject@@XZ @ 70 NONAME ; struct QMetaObject const & NmUiEngine::getStaticMetaObject(void)
-	?applicationStateInterfaceInstance@NmDataPluginFactory@@AAEPAVNmApplicationStateInterface@@PAVQObject@@@Z @ 71 NONAME ; class NmApplicationStateInterface * NmDataPluginFactory::applicationStateInterfaceInstance(class QObject *)
-	?metaObject@NmMessageListModel@@UBEPBUQMetaObject@@XZ @ 72 NONAME ; struct QMetaObject const * NmMessageListModel::metaObject(void) const
-	?messageBeingSent@NmUiEngine@@QBEPBVNmMessage@@XZ @ 73 NONAME ; class NmMessage const * NmUiEngine::messageBeingSent(void) const
-	?handleMailboxEvent@NmUiEngine@@AAEXW4NmMailboxEvent@@ABV?$QList@VNmId@@@@@Z @ 74 NONAME ; void NmUiEngine::handleMailboxEvent(enum NmMailboxEvent, class QList<class NmId> const &)
-	?interfaceInstance@NmDataPluginFactory@@QAEPAVNmDataPluginInterface@@VNmId@@@Z @ 75 NONAME ; class NmDataPluginInterface * NmDataPluginFactory::interfaceInstance(class NmId)
-	?goOffline@NmBaseClientPlugin@@AAEXABVNmId@@@Z @ 76 NONAME ; void NmBaseClientPlugin::goOffline(class NmId const &)
-	?sendMessage@NmUiEngine@@QAEXPAVNmMessage@@ABV?$QList@PAVNmOperation@@@@@Z @ 77 NONAME ; void NmUiEngine::sendMessage(class NmMessage *, class QList<class NmOperation *> const &)
-	?tr@NmDataManager@@SA?AVQString@@PBD0H@Z @ 78 NONAME ; class QString NmDataManager::tr(char const *, char const *, int)
-	??0NmMailboxListModel@@QAE@AAVNmDataManager@@PAVQObject@@@Z @ 79 NONAME ; NmMailboxListModel::NmMailboxListModel(class NmDataManager &, class QObject *)
-	?handleMessageEvent@NmMessageListModel@@QAEXW4NmMessageEvent@@ABVNmId@@ABV?$QList@VNmId@@@@1@Z @ 80 NONAME ; void NmMessageListModel::handleMessageEvent(enum NmMessageEvent, class NmId const &, class QList<class NmId> const &, class NmId const &)
-	?setPriorityNormal@NmBaseClientPlugin@@QAEXXZ @ 81 NONAME ; void NmBaseClientPlugin::setPriorityNormal(void)
-	??_ENmMessageSendingOperation@@UAE@I@Z @ 82 NONAME ; NmMessageSendingOperation::~NmMessageSendingOperation(unsigned int)
-	?changed@NmMessageListModel@@AAE_NABVNmMessageEnvelope@@0@Z @ 83 NONAME ; bool NmMessageListModel::changed(class NmMessageEnvelope const &, class NmMessageEnvelope const &)
-	?openAttachment@NmBaseClientPlugin@@QAEXXZ @ 84 NONAME ; void NmBaseClientPlugin::openAttachment(void)
-	?staticMetaObject@NmMessageCreationOperation@@2UQMetaObject@@B @ 85 NONAME ; struct QMetaObject const NmMessageCreationOperation::staticMetaObject
-	?handleMailboxEvent@NmMailboxListModel@@QAEXW4NmMailboxEvent@@ABV?$QList@VNmId@@@@@Z @ 86 NONAME ; void NmMailboxListModel::handleMailboxEvent(enum NmMailboxEvent, class QList<class NmId> const &)
-	?metaObject@NmStoreEnvelopesOperation@@UBEPBUQMetaObject@@XZ @ 87 NONAME ; struct QMetaObject const * NmStoreEnvelopesOperation::metaObject(void) const
-	?trUtf8@NmMailboxListModel@@SA?AVQString@@PBD0H@Z @ 88 NONAME ; class QString NmMailboxListModel::trUtf8(char const *, char const *, int)
-	?mPluginArray@NmDataPluginFactory@@0PAV?$QList@PAVQObject@@@@A @ 89 NONAME ; class QList<class QObject *> * NmDataPluginFactory::mPluginArray
-	?instance@NmDataPluginFactory@@SAPAV1@XZ @ 90 NONAME ; class NmDataPluginFactory * NmDataPluginFactory::instance(void)
-	?getStaticMetaObject@NmMessageListModel@@SAABUQMetaObject@@XZ @ 91 NONAME ; struct QMetaObject const & NmMessageListModel::getStaticMetaObject(void)
-	?deleteMessageFromViewerView@NmBaseClientPlugin@@QAEXXZ @ 92 NONAME ; void NmBaseClientPlugin::deleteMessageFromViewerView(void)
-	?tr@NmUiEngine@@SA?AVQString@@PBD0H@Z @ 93 NONAME ; class QString NmUiEngine::tr(char const *, char const *, int)
-	?refresh@NmMessageListModel@@QAEXVNmId@@0ABV?$QList@PAVNmMessageEnvelope@@@@@Z @ 94 NONAME ; void NmMessageListModel::refresh(class NmId, class NmId, class QList<class NmMessageEnvelope *> const &)
-	?mailboxById@NmUiEngine@@QAEPAVNmMailboxMetaData@@ABVNmId@@@Z @ 95 NONAME ; class NmMailboxMetaData * NmUiEngine::mailboxById(class NmId const &)
-	?createNewMessage@NmUiEngine@@QAE?AV?$QPointer@VNmMessageCreationOperation@@@@ABVNmId@@@Z @ 96 NONAME ; class QPointer<class NmMessageCreationOperation> NmUiEngine::createNewMessage(class NmId const &)
-	??_ENmMessageListModelItem@@UAE@I@Z @ 97 NONAME ; NmMessageListModelItem::~NmMessageListModelItem(unsigned int)
-	?replyAllMail@NmBaseClientPlugin@@QAEXXZ @ 98 NONAME ; void NmBaseClientPlugin::replyAllMail(void)
-	?handleMatchFound@NmUiEngine@@AAEXABVNmId@@0@Z @ 99 NONAME ; void NmUiEngine::handleMatchFound(class NmId const &, class NmId const &)
-	?syncStateEvent@NmUiEngine@@IAEXW4NmSyncState@@ABVNmId@@@Z @ 100 NONAME ; void NmUiEngine::syncStateEvent(enum NmSyncState, class NmId const &)
-	?trUtf8@NmDataManager@@SA?AVQString@@PBD0@Z @ 101 NONAME ; class QString NmDataManager::trUtf8(char const *, char const *)
-	?setEnvelopeProperties@NmMessageListModel@@QAEXW4NmEnvelopeProperties@@ABV?$QList@VNmId@@@@@Z @ 102 NONAME ; void NmMessageListModel::setEnvelopeProperties(enum NmEnvelopeProperties, class QList<class NmId> const &)
-	??1NmStoreEnvelopesOperation@@MAE@XZ @ 103 NONAME ; NmStoreEnvelopesOperation::~NmStoreEnvelopesOperation(void)
-	?tr@NmUiEngine@@SA?AVQString@@PBD0@Z @ 104 NONAME ; class QString NmUiEngine::tr(char const *, char const *)
-	?mPluginLoaderArray@NmDataPluginFactory@@0V?$QList@PAVQPluginLoader@@@@A @ 105 NONAME ; class QList<class QPluginLoader *> NmDataPluginFactory::mPluginLoaderArray
-	?trUtf8@NmBaseClientPlugin@@SA?AVQString@@PBD0@Z @ 106 NONAME ; class QString NmBaseClientPlugin::trUtf8(char const *, char const *)
-	?deleteOperation@NmOperation@@AAEXXZ @ 107 NONAME ; void NmOperation::deleteOperation(void)
-	?trUtf8@NmBaseClientPlugin@@SA?AVQString@@PBD0H@Z @ 108 NONAME ; class QString NmBaseClientPlugin::trUtf8(char const *, char const *, int)
-	?createViewerViewCommands@NmBaseClientPlugin@@AAEXABVNmActionRequest@@AAV?$QList@PAVNmAction@@@@@Z @ 109 NONAME ; void NmBaseClientPlugin::createViewerViewCommands(class NmActionRequest const &, class QList<class NmAction *> &)
-	?fetchMessagePart@NmUiEngine@@QAE?AV?$QPointer@VNmOperation@@@@ABVNmId@@000@Z @ 110 NONAME ; class QPointer<class NmOperation> NmUiEngine::fetchMessagePart(class NmId const &, class NmId const &, class NmId const &, class NmId const &)
-	?tr@NmMailboxListModel@@SA?AVQString@@PBD0H@Z @ 111 NONAME ; class QString NmMailboxListModel::tr(char const *, char const *, int)
-	?handleConnectEvent@NmUiEngine@@QAEXW4NmConnectState@@ABVNmId@@H@Z @ 112 NONAME ; void NmUiEngine::handleConnectEvent(enum NmConnectState, class NmId const &, int)
-	?trUtf8@NmUiEngine@@SA?AVQString@@PBD0H@Z @ 113 NONAME ; class QString NmUiEngine::trUtf8(char const *, char const *, int)
-	?createMailboxItem@NmMailboxListModel@@AAEPAVNmMailboxListModelItem@@PBVNmMailbox@@@Z @ 114 NONAME ; class NmMailboxListModelItem * NmMailboxListModel::createMailboxItem(class NmMailbox const *)
-	?setTitleDivider@NmMessageListModelItem@@QAEXABVQString@@@Z @ 115 NONAME ; void NmMessageListModelItem::setTitleDivider(class QString const &)
-	?markAsRead@NmBaseClientPlugin@@QAEXXZ @ 116 NONAME ; void NmBaseClientPlugin::markAsRead(void)
-	?getInsertionIndex@NmMessageListModel@@ABEHABVNmMessageEnvelope@@@Z @ 117 NONAME ; int NmMessageListModel::getInsertionIndex(class NmMessageEnvelope const &) const
-	?updateOperationProgress@NmOperation@@QAEXH@Z @ 118 NONAME ; void NmOperation::updateOperationProgress(int)
-	??1NmFolderListModel@@UAE@XZ @ 119 NONAME ; NmFolderListModel::~NmFolderListModel(void)
-	?operationCompleted@NmUiEngine@@IAEXABVNmOperationCompletionEvent@@@Z @ 120 NONAME ; void NmUiEngine::operationCompleted(class NmOperationCompletionEvent const &)
-	??1NmDataManager@@UAE@XZ @ 121 NONAME ; NmDataManager::~NmDataManager(void)
-	?trUtf8@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0@Z @ 122 NONAME ; class QString NmStoreEnvelopesOperation::trUtf8(char const *, char const *)
-	?setAddress@NmMailboxMetaData@@QAEXABVQString@@@Z @ 123 NONAME ; void NmMailboxMetaData::setAddress(class QString const &)
-	?getStaticMetaObject@NmMessageCreationOperation@@SAABUQMetaObject@@XZ @ 124 NONAME ; struct QMetaObject const & NmMessageCreationOperation::getStaticMetaObject(void)
-	?updateActiveFolder@NmUiEngine@@QAEXABVNmId@@0@Z @ 125 NONAME ; void NmUiEngine::updateActiveFolder(class NmId const &, class NmId const &)
-	?trUtf8@NmAddAttachmentsOperation@@SA?AVQString@@PBD0@Z @ 126 NONAME ; class QString NmAddAttachmentsOperation::trUtf8(char const *, char const *)
-	?name@NmMailboxMetaData@@QBE?AVQString@@XZ @ 127 NONAME ; class QString NmMailboxMetaData::name(void) const
-	?qt_metacall@NmDataManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 128 NONAME ; int NmDataManager::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?runAsyncOperation@NmOperation@@MAEXXZ @ 129 NONAME ; void NmOperation::runAsyncOperation(void)
-	??0NmFolderListModel@@QAE@AAVNmDataManager@@PAVQObject@@@Z @ 130 NONAME ; NmFolderListModel::NmFolderListModel(class NmDataManager &, class QObject *)
-	?folderTypeById@NmDataManager@@QAE?AW4NmFolderType@@VNmId@@0@Z @ 131 NONAME ; enum NmFolderType NmDataManager::folderTypeById(class NmId, class NmId)
-	?tr@NmBaseClientPlugin@@SA?AVQString@@PBD0H@Z @ 132 NONAME ; class QString NmBaseClientPlugin::tr(char const *, char const *, int)
-	??0NmMailboxMetaData@@QAE@XZ @ 133 NONAME ; NmMailboxMetaData::NmMailboxMetaData(void)
-	?setEnvelope@NmMessageListModelItem@@QAEXPAVNmMessageEnvelope@@@Z @ 134 NONAME ; void NmMessageListModelItem::setEnvelope(class NmMessageEnvelope *)
-	?saveMessage@NmUiEngine@@QAEHABVNmMessage@@@Z @ 135 NONAME ; int NmUiEngine::saveMessage(class NmMessage const &)
-	?setId@NmMailboxMetaData@@QAEXABVNmId@@@Z @ 136 NONAME ; void NmMailboxMetaData::setId(class NmId const &)
-	?folderTypeById@NmUiEngine@@QAE?AW4NmFolderType@@VNmId@@0@Z @ 137 NONAME ; enum NmFolderType NmUiEngine::folderTypeById(class NmId, class NmId)
-	?mReferenceCount@NmDataPluginFactory@@0HA @ 138 NONAME ; int NmDataPluginFactory::mReferenceCount
-	?tr@NmOperation@@SA?AVQString@@PBD0@Z @ 139 NONAME ; class QString NmOperation::tr(char const *, char const *)
-	?updateMessageEnvelope@NmMessageListModel@@AAEXABVNmId@@00@Z @ 140 NONAME ; void NmMessageListModel::updateMessageEnvelope(class NmId const &, class NmId const &, class NmId const &)
-	?tr@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0@Z @ 141 NONAME ; class QString NmStoreEnvelopesOperation::tr(char const *, char const *)
-	?messagesBelongUnderSameDivider@NmMessageListModel@@ABE_NPBVNmMessageEnvelope@@0@Z @ 142 NONAME ; bool NmMessageListModel::messagesBelongUnderSameDivider(class NmMessageEnvelope const *, class NmMessageEnvelope const *) const
-	?matchFound@NmUiEngine@@IAEXABVNmId@@0@Z @ 143 NONAME ; void NmUiEngine::matchFound(class NmId const &, class NmId const &)
-	?metaObject@NmDataManager@@UBEPBUQMetaObject@@XZ @ 144 NONAME ; struct QMetaObject const * NmDataManager::metaObject(void) const
-	?isSendingMessage@NmUiEngine@@QBE_NXZ @ 145 NONAME ; bool NmUiEngine::isSendingMessage(void) const
-	?freeIcons@NmIcons@@SAXXZ @ 146 NONAME ; void NmIcons::freeIcons(void)
-	?tr@NmAddAttachmentsOperation@@SA?AVQString@@PBD0@Z @ 147 NONAME ; class QString NmAddAttachmentsOperation::tr(char const *, char const *)
-	?itemFromModel@NmMessageListModel@@AAEPAVNmMessageListModelItem@@ABVNmId@@@Z @ 148 NONAME ; class NmMessageListModelItem * NmMessageListModel::itemFromModel(class NmId const &)
-	?instance@NmUiEngine@@SAPAV1@XZ @ 149 NONAME ; class NmUiEngine * NmUiEngine::instance(void)
-	?createMessageListCommands@NmBaseClientPlugin@@AAEXABVNmActionRequest@@AAV?$QList@PAVNmAction@@@@@Z @ 150 NONAME ; void NmBaseClientPlugin::createMessageListCommands(class NmActionRequest const &, class QList<class NmAction *> &)
-	?updateEnvelopeProperty@NmBaseClientPlugin@@AAEXW4NmEnvelopeProperties@@@Z @ 151 NONAME ; void NmBaseClientPlugin::updateEnvelopeProperty(enum NmEnvelopeProperties)
-	??1NmAddAttachmentsOperation@@MAE@XZ @ 152 NONAME ; NmAddAttachmentsOperation::~NmAddAttachmentsOperation(void)
-	?goOffline@NmUiEngine@@QAEHABVNmId@@@Z @ 153 NONAME ; int NmUiEngine::goOffline(class NmId const &)
-	?staticMetaObject@NmDataManager@@2UQMetaObject@@B @ 154 NONAME ; struct QMetaObject const NmDataManager::staticMetaObject
-	?mInstance@NmUiEngine@@0PAV1@A @ 155 NONAME ; class NmUiEngine * NmUiEngine::mInstance
-	?attach@NmBaseClientPlugin@@QAEXXZ @ 156 NONAME ; void NmBaseClientPlugin::attach(void)
-	?setIgnoreFolderIds@NmMessageListModel@@QAEX_N@Z @ 157 NONAME ; void NmMessageListModel::setIgnoreFolderIds(bool)
-	?metaObject@NmAddAttachmentsOperation@@UBEPBUQMetaObject@@XZ @ 158 NONAME ; struct QMetaObject const * NmAddAttachmentsOperation::metaObject(void) const
-	?refresh@NmFolderListModel@@QAEXAAV?$QList@PAVNmFolder@@@@@Z @ 159 NONAME ; void NmFolderListModel::refresh(class QList<class NmFolder *> &)
-	?handleCompletedRemoveDraftOperation@NmUiEngine@@QAEXXZ @ 160 NONAME ; void NmUiEngine::handleCompletedRemoveDraftOperation(void)
-	?trUtf8@NmMailboxListModel@@SA?AVQString@@PBD0@Z @ 161 NONAME ; class QString NmMailboxListModel::trUtf8(char const *, char const *)
-	?envelopeById@NmDataManager@@QAEPAVNmMessageEnvelope@@ABVNmId@@00@Z @ 162 NONAME ; class NmMessageEnvelope * NmDataManager::envelopeById(class NmId const &, class NmId const &, class NmId const &)
-	?getStaticMetaObject@NmOperation@@SAABUQMetaObject@@XZ @ 163 NONAME ; struct QMetaObject const & NmOperation::getStaticMetaObject(void)
-	?trUtf8@NmOperation@@SA?AVQString@@PBD0@Z @ 164 NONAME ; class QString NmOperation::trUtf8(char const *, char const *)
-	?addAttachments@NmUiEngine@@QAE?AV?$QPointer@VNmAddAttachmentsOperation@@@@ABVNmMessage@@ABV?$QList@VQString@@@@@Z @ 165 NONAME ; class QPointer<class NmAddAttachmentsOperation> NmUiEngine::addAttachments(class NmMessage const &, class QList<class QString> const &)
-	?doCancelOperation@NmOperation@@MAEXXZ @ 166 NONAME ; void NmOperation::doCancelOperation(void)
-	?tr@NmOperation@@SA?AVQString@@PBD0H@Z @ 167 NONAME ; class QString NmOperation::tr(char const *, char const *, int)
-	??_ENmOperation@@UAE@I@Z @ 168 NONAME ; NmOperation::~NmOperation(unsigned int)
-	?tr@NmMessageCreationOperation@@SA?AVQString@@PBD0@Z @ 169 NONAME ; class QString NmMessageCreationOperation::tr(char const *, char const *)
-	?qt_metacall@NmMessageListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 170 NONAME ; int NmMessageListModel::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?staticMetaObject@NmOperation@@2UQMetaObject@@B @ 171 NONAME ; struct QMetaObject const NmOperation::staticMetaObject
-	??1NmUiEngine@@EAE@XZ @ 172 NONAME ; NmUiEngine::~NmUiEngine(void)
-	?messagePartFile@NmUiEngine@@QAE?AVXQSharableFile@@ABVNmId@@000@Z @ 173 NONAME ; class XQSharableFile NmUiEngine::messagePartFile(class NmId const &, class NmId const &, class NmId const &, class NmId const &)
-	??_ENmMessageListModel@@UAE@I@Z @ 174 NONAME ; NmMessageListModel::~NmMessageListModel(unsigned int)
-	?addPreliminaryOperation@NmOperation@@QAEXPAV1@@Z @ 175 NONAME ; void NmOperation::addPreliminaryOperation(class NmOperation *)
-	?deleteMessages@NmUiEngine@@QAEHABVNmId@@0ABV?$QList@VNmId@@@@@Z @ 176 NONAME ; int NmUiEngine::deleteMessages(class NmId const &, class NmId const &, class QList<class NmId> const &)
-	??_ENmStoreEnvelopesOperation@@UAE@I@Z @ 177 NONAME ; NmStoreEnvelopesOperation::~NmStoreEnvelopesOperation(unsigned int)
-	?mailboxById@NmDataManager@@QAEPAVNmMailboxMetaData@@ABVNmId@@@Z @ 178 NONAME ; class NmMailboxMetaData * NmDataManager::mailboxById(class NmId const &)
-	?messageListModelForSearch@NmUiEngine@@QAEAAVNmMessageListModel@@ABVNmId@@@Z @ 179 NONAME ; class NmMessageListModel & NmUiEngine::messageListModelForSearch(class NmId const &)
-	?search@NmBaseClientPlugin@@QAEXXZ @ 180 NONAME ; void NmBaseClientPlugin::search(void)
-	?pluginInstances@NmDataPluginFactory@@QAEPAV?$QList@PAVQObject@@@@XZ @ 181 NONAME ; class QList<class QObject *> * NmDataPluginFactory::pluginInstances(void)
-	?tr@NmBaseClientPlugin@@SA?AVQString@@PBD0@Z @ 182 NONAME ; class QString NmBaseClientPlugin::tr(char const *, char const *)
-	?listMessages@NmDataManager@@QAEXABVNmId@@0AAV?$QList@PAVNmMessageEnvelope@@@@@Z @ 183 NONAME ; void NmDataManager::listMessages(class NmId const &, class NmId const &, class QList<class NmMessageEnvelope *> &)
-	??1NmBaseClientPlugin@@UAE@XZ @ 184 NONAME ; NmBaseClientPlugin::~NmBaseClientPlugin(void)
-	?qt_metacast@NmDataManager@@UAEPAXPBD@Z @ 185 NONAME ; void * NmDataManager::qt_metacast(char const *)
-	??0NmMessageCreationOperation@@QAE@XZ @ 186 NONAME ; NmMessageCreationOperation::NmMessageCreationOperation(void)
-	?qt_metacall@NmBaseClientPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 187 NONAME ; int NmBaseClientPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?envelopePtr@NmMessageListModelItem@@QAEPAVNmMessageEnvelope@@XZ @ 188 NONAME ; class NmMessageEnvelope * NmMessageListModelItem::envelopePtr(void)
-	?messageListModel@NmUiEngine@@QAEAAVNmMessageListModel@@ABVNmId@@0@Z @ 189 NONAME ; class NmMessageListModel & NmUiEngine::messageListModel(class NmId const &, class NmId const &)
-	??1NmMailboxMetaData@@UAE@XZ @ 190 NONAME ; NmMailboxMetaData::~NmMailboxMetaData(void)
-	?connectionEvent@NmUiEngine@@IAEXW4NmConnectState@@ABVNmId@@@Z @ 191 NONAME ; void NmUiEngine::connectionEvent(enum NmConnectState, class NmId const &)
-	?mailbox@NmDataManager@@QAEPAVNmMailbox@@ABVNmId@@@Z @ 192 NONAME ; class NmMailbox * NmDataManager::mailbox(class NmId const &)
-	?interfaceInstance@NmDataPluginFactory@@QAEPAVNmDataPluginInterface@@PAVQObject@@@Z @ 193 NONAME ; class NmDataPluginInterface * NmDataPluginFactory::interfaceInstance(class QObject *)
-	?refreshModelItem@NmMailboxListModel@@QAEXABVNmId@@@Z @ 194 NONAME ; void NmMailboxListModel::refreshModelItem(class NmId const &)
-	?metaObject@NmMailboxListModel@@UBEPBUQMetaObject@@XZ @ 195 NONAME ; struct QMetaObject const * NmMailboxListModel::metaObject(void) const
-	?IconId@NmMailboxMetaData@@QBE?AVNmId@@XZ @ 196 NONAME ; class NmId NmMailboxMetaData::IconId(void) const
-	?sendOperationCompleted@NmUiEngine@@IAEXXZ @ 197 NONAME ; void NmUiEngine::sendOperationCompleted(void)
-	??0NmFolderMetaData@@QAE@XZ @ 198 NONAME ; NmFolderMetaData::NmFolderMetaData(void)
-	?staticMetaObject@NmAddAttachmentsOperation@@2UQMetaObject@@B @ 199 NONAME ; struct QMetaObject const NmAddAttachmentsOperation::staticMetaObject
-	?connectionState@NmUiEngine@@QAE?AW4NmConnectState@@ABVNmId@@@Z @ 200 NONAME ; enum NmConnectState NmUiEngine::connectionState(class NmId const &)
-	?createTitleDividerItem@NmMessageListModel@@AAEPAVNmMessageListModelItem@@PAVNmMessageEnvelope@@@Z @ 201 NONAME ; class NmMessageListModelItem * NmMessageListModel::createTitleDividerItem(class NmMessageEnvelope *)
-	?setId@NmFolderMetaData@@QAEXABVNmId@@@Z @ 202 NONAME ; void NmFolderMetaData::setId(class NmId const &)
-	??0NmOperation@@QAE@XZ @ 203 NONAME ; NmOperation::NmOperation(void)
-	?cancelOperation@NmOperation@@QAEXXZ @ 204 NONAME ; void NmOperation::cancelOperation(void)
-	??_ENmFolderMetaData@@UAE@I@Z @ 205 NONAME ; NmFolderMetaData::~NmFolderMetaData(unsigned int)
-	?qt_metacast@NmMessageListModel@@UAEPAXPBD@Z @ 206 NONAME ; void * NmMessageListModel::qt_metacast(char const *)
-	?operationProgressChanged@NmOperation@@IAEXH@Z @ 207 NONAME ; void NmOperation::operationProgressChanged(int)
-	?trUtf8@NmOperation@@SA?AVQString@@PBD0H@Z @ 208 NONAME ; class QString NmOperation::trUtf8(char const *, char const *, int)
-	??_ENmMailboxListModel@@UAE@I@Z @ 209 NONAME ; NmMailboxListModel::~NmMailboxListModel(unsigned int)
-	?messageDeleted@NmUiEngine@@IAEXABVNmId@@00@Z @ 210 NONAME ; void NmUiEngine::messageDeleted(class NmId const &, class NmId const &, class NmId const &)
-	?trUtf8@NmMessageCreationOperation@@SA?AVQString@@PBD0@Z @ 211 NONAME ; class QString NmMessageCreationOperation::trUtf8(char const *, char const *)
-	?metaObject@NmUiEngine@@UBEPBUQMetaObject@@XZ @ 212 NONAME ; struct QMetaObject const * NmUiEngine::metaObject(void) const
-	??_ENmBaseClientPlugin@@UAE@I@Z @ 213 NONAME ; NmBaseClientPlugin::~NmBaseClientPlugin(unsigned int)
-	?markAsUnread@NmBaseClientPlugin@@QAEXXZ @ 214 NONAME ; void NmBaseClientPlugin::markAsUnread(void)
-	?metaObject@NmBaseClientPlugin@@UBEPBUQMetaObject@@XZ @ 215 NONAME ; struct QMetaObject const * NmBaseClientPlugin::metaObject(void) const
-	?tr@NmDataManager@@SA?AVQString@@PBD0@Z @ 216 NONAME ; class QString NmDataManager::tr(char const *, char const *)
-	?mailboxListModel@NmUiEngine@@QAEAAVNmMailboxListModel@@XZ @ 217 NONAME ; class NmMailboxListModel & NmUiEngine::mailboxListModel(void)
-	?fetchMessage@NmUiEngine@@QAE?AV?$QPointer@VNmOperation@@@@ABVNmId@@00@Z @ 218 NONAME ; class QPointer<class NmOperation> NmUiEngine::fetchMessage(class NmId const &, class NmId const &, class NmId const &)
-	?setIconId@NmMailboxMetaData@@QAEXABVNmId@@@Z @ 219 NONAME ; void NmMailboxMetaData::setIconId(class NmId const &)
-	??1NmDataPluginFactory@@EAE@XZ @ 220 NONAME ; NmDataPluginFactory::~NmDataPluginFactory(void)
-	?refreshMailboxListModel@NmUiEngine@@QAEXXZ @ 221 NONAME ; void NmUiEngine::refreshMailboxListModel(void)
-	?qt_metacall@NmStoreEnvelopesOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 222 NONAME ; int NmStoreEnvelopesOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?trUtf8@NmMessageListModel@@SA?AVQString@@PBD0@Z @ 223 NONAME ; class QString NmMessageListModel::trUtf8(char const *, char const *)
-	?rowCount@NmFolderListModel@@UBEHABVQModelIndex@@@Z @ 224 NONAME ; int NmFolderListModel::rowCount(class QModelIndex const &) const
-	?doUpdateOperationProgress@NmOperation@@MAEXXZ @ 225 NONAME ; void NmOperation::doUpdateOperationProgress(void)
-	?tr@NmMailboxListModel@@SA?AVQString@@PBD0@Z @ 226 NONAME ; class QString NmMailboxListModel::tr(char const *, char const *)
-	?removeMessage@NmUiEngine@@QAEHABVNmId@@00@Z @ 227 NONAME ; int NmUiEngine::removeMessage(class NmId const &, class NmId const &, class NmId const &)
-	??_ENmUiEngine@@UAE@I@Z @ 228 NONAME ; NmUiEngine::~NmUiEngine(unsigned int)
-	?operationCompleted@NmOperation@@IAEXH@Z @ 229 NONAME ; void NmOperation::operationCompleted(int)
-	?callEmitDataChanged@NmMessageListModelItem@@QAEXXZ @ 230 NONAME ; void NmMessageListModelItem::callEmitDataChanged(void)
-	?handleRequest@NmBaseClientPlugin@@IAEXW4NmActionResponseCommand@@ABVNmActionRequest@@@Z @ 231 NONAME ; void NmBaseClientPlugin::handleRequest(enum NmActionResponseCommand, class NmActionRequest const &)
-	??0NmMessageListModel@@QAE@AAVNmDataManager@@PAVQObject@@@Z @ 232 NONAME ; NmMessageListModel::NmMessageListModel(class NmDataManager &, class QObject *)
-	??_ENmAddAttachmentsOperation@@UAE@I@Z @ 233 NONAME ; NmAddAttachmentsOperation::~NmAddAttachmentsOperation(unsigned int)
-	?syncState@NmUiEngine@@QAE?AW4NmSyncState@@ABVNmId@@@Z @ 234 NONAME ; enum NmSyncState NmUiEngine::syncState(class NmId const &)
-	??1NmOperation@@MAE@XZ @ 235 NONAME ; NmOperation::~NmOperation(void)
-	?tr@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0H@Z @ 236 NONAME ; class QString NmStoreEnvelopesOperation::tr(char const *, char const *, int)
-	?listMailboxes@NmDataManager@@QAEXAAV?$QList@PAVNmMailbox@@@@@Z @ 237 NONAME ; void NmDataManager::listMailboxes(class QList<class NmMailbox *> &)
-	?message@NmUiEngine@@QAEPAVNmMessage@@ABVNmId@@00@Z @ 238 NONAME ; class NmMessage * NmUiEngine::message(class NmId const &, class NmId const &, class NmId const &)
-	?refreshMailbox@NmUiEngine@@QAEHABVNmId@@@Z @ 239 NONAME ; int NmUiEngine::refreshMailbox(class NmId const &)
-	?trUtf8@NmUiEngine@@SA?AVQString@@PBD0@Z @ 240 NONAME ; class QString NmUiEngine::trUtf8(char const *, char const *)
-	?contentToMessagePart@NmUiEngine@@QAEHABVNmId@@00AAVNmMessagePart@@@Z @ 241 NONAME ; int NmUiEngine::contentToMessagePart(class NmId const &, class NmId const &, class NmId const &, class NmMessagePart &)
-	?removeItem@NmMessageListModel@@AAEXHAAVNmMessageListModelItem@@@Z @ 242 NONAME ; void NmMessageListModel::removeItem(int, class NmMessageListModelItem &)
-	??1NmMailboxListModel@@UAE@XZ @ 243 NONAME ; NmMailboxListModel::~NmMailboxListModel(void)
-	??0NmBaseClientPlugin@@QAE@XZ @ 244 NONAME ; NmBaseClientPlugin::NmBaseClientPlugin(void)
-	?forwardMail@NmBaseClientPlugin@@QAEXXZ @ 245 NONAME ; void NmBaseClientPlugin::forwardMail(void)
-	?setItemType@NmMessageListModelItem@@QAEXW4NmMessageItemType@1@@Z @ 246 NONAME ; void NmMessageListModelItem::setItemType(enum NmMessageListModelItem::NmMessageItemType)
-	??_ENmDataPluginFactory@@UAE@I@Z @ 247 NONAME ; NmDataPluginFactory::~NmDataPluginFactory(unsigned int)
-	?mailboxListChanged@NmBaseClientPlugin@@AAEXABVNmId@@W4MailboxEventType@NmSettings@@@Z @ 248 NONAME ; void NmBaseClientPlugin::mailboxListChanged(class NmId const &, enum NmSettings::MailboxEventType)
-	?expanded@NmMessageListModelItem@@QBE_NXZ @ 249 NONAME ; bool NmMessageListModelItem::expanded(void) const
-	?columnCount@NmFolderListModel@@UBEHABVQModelIndex@@@Z @ 250 NONAME ; int NmFolderListModel::columnCount(class QModelIndex const &) const
-	?pluginInstance@NmDataPluginFactory@@QAEPAVQObject@@VNmId@@@Z @ 251 NONAME ; class QObject * NmDataPluginFactory::pluginInstance(class NmId)
-	?setNewParam@NmMessageListModel@@IAEXPAVNmUiStartParam@@@Z @ 252 NONAME ; void NmMessageListModel::setNewParam(class NmUiStartParam *)
-	?data@NmMessageListModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 253 NONAME ; class QVariant NmMessageListModel::data(class QModelIndex const &, int) const
-	?goOnline@NmBaseClientPlugin@@AAEXABVNmId@@@Z @ 254 NONAME ; void NmBaseClientPlugin::goOnline(class NmId const &)
-	?createNewMail@NmBaseClientPlugin@@QAEXXZ @ 255 NONAME ; void NmBaseClientPlugin::createNewMail(void)
-	?qt_metacast@NmBaseClientPlugin@@UAEPAXPBD@Z @ 256 NONAME ; void * NmBaseClientPlugin::qt_metacast(char const *)
-	?staticMetaObject@NmBaseClientPlugin@@2UQMetaObject@@B @ 257 NONAME ; struct QMetaObject const NmBaseClientPlugin::staticMetaObject
-	?searchComplete@NmUiEngine@@IAEXXZ @ 258 NONAME ; void NmUiEngine::searchComplete(void)
-	?setEnvelope@NmMessageListModelItem@@QAEXABVNmMessageEnvelope@@@Z @ 259 NONAME ; void NmMessageListModelItem::setEnvelope(class NmMessageEnvelope const &)
-	?qt_metacast@NmAddAttachmentsOperation@@UAEPAXPBD@Z @ 260 NONAME ; void * NmAddAttachmentsOperation::qt_metacast(char const *)
-	?createNewMailViewerToolBar@NmBaseClientPlugin@@QAEXXZ @ 261 NONAME ; void NmBaseClientPlugin::createNewMailViewerToolBar(void)
-	?staticMetaObject@NmMailboxListModel@@2UQMetaObject@@B @ 262 NONAME ; struct QMetaObject const NmMailboxListModel::staticMetaObject
-	?qt_metacall@NmMessageCreationOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 263 NONAME ; int NmMessageCreationOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?trUtf8@NmDataManager@@SA?AVQString@@PBD0H@Z @ 264 NONAME ; class QString NmDataManager::trUtf8(char const *, char const *, int)
-	?trUtf8@NmMessageCreationOperation@@SA?AVQString@@PBD0H@Z @ 265 NONAME ; class QString NmMessageCreationOperation::trUtf8(char const *, char const *, int)
-	?createForwardMessage@NmUiEngine@@QAE?AV?$QPointer@VNmMessageCreationOperation@@@@ABVNmId@@0@Z @ 266 NONAME ; class QPointer<class NmMessageCreationOperation> NmUiEngine::createForwardMessage(class NmId const &, class NmId const &)
-	?handleSyncStateEvent@NmUiEngine@@QAEXW4NmSyncState@@ABVNmOperationCompletionEvent@@@Z @ 267 NONAME ; void NmUiEngine::handleSyncStateEvent(enum NmSyncState, class NmOperationCompletionEvent const &)
-	?completeOperation@NmOperation@@QAEXH@Z @ 268 NONAME ; void NmOperation::completeOperation(int)
-	?parent@NmFolderListModel@@UBE?AVQModelIndex@@ABV2@@Z @ 269 NONAME ; class QModelIndex NmFolderListModel::parent(class QModelIndex const &) const
-	?folder@NmDataManager@@QAEPAVNmFolder@@ABVNmId@@0@Z @ 270 NONAME ; class NmFolder * NmDataManager::folder(class NmId const &, class NmId const &)
-	??0NmMessageSendingOperation@@QAE@XZ @ 271 NONAME ; NmMessageSendingOperation::NmMessageSendingOperation(void)
-	?replyMail@NmBaseClientPlugin@@QAEXXZ @ 272 NONAME ; void NmBaseClientPlugin::replyMail(void)
-	??1NmMessageListModelItem@@UAE@XZ @ 273 NONAME ; NmMessageListModelItem::~NmMessageListModelItem(void)
-	?mailboxPropertyChanged@NmBaseClientPlugin@@AAEXABVNmId@@VQVariant@@1@Z @ 274 NONAME ; void NmBaseClientPlugin::mailboxPropertyChanged(class NmId const &, class QVariant, class QVariant)
-	?qt_metacall@NmOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 275 NONAME ; int NmOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?removeMessageFromModel@NmMessageListModel@@AAEXABVNmId@@@Z @ 276 NONAME ; void NmMessageListModel::removeMessageFromModel(class NmId const &)
-	?trUtf8@NmMessageListModel@@SA?AVQString@@PBD0H@Z @ 277 NONAME ; class QString NmMessageListModel::trUtf8(char const *, char const *, int)
-	?operationPartCompleted@NmAddAttachmentsOperation@@IAEXABVQString@@ABVNmId@@H@Z @ 278 NONAME ; void NmAddAttachmentsOperation::operationPartCompleted(class QString const &, class NmId const &, int)
-	?trUtf8@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0H@Z @ 279 NONAME ; class QString NmStoreEnvelopesOperation::trUtf8(char const *, char const *, int)
-	?tr@NmMessageListModel@@SA?AVQString@@PBD0@Z @ 280 NONAME ; class QString NmMessageListModel::tr(char const *, char const *)
-	?doCompleteOperation@NmOperation@@MAEXXZ @ 281 NONAME ; void NmOperation::doCompleteOperation(void)
-	?dividerInsertionIndex@NmMessageListModel@@AAEHH@Z @ 282 NONAME ; int NmMessageListModel::dividerInsertionIndex(int)
-	?createMessageItem@NmMessageListModel@@AAEPAVNmMessageListModelItem@@PAVNmMessageEnvelope@@@Z @ 283 NONAME ; class NmMessageListModelItem * NmMessageListModel::createMessageItem(class NmMessageEnvelope *)
-	?id@NmFolderMetaData@@QBE?AVNmId@@XZ @ 284 NONAME ; class NmId NmFolderMetaData::id(void) const
-	?createReplyMessage@NmUiEngine@@QAE?AV?$QPointer@VNmMessageCreationOperation@@@@ABVNmId@@0_N@Z @ 285 NONAME ; class QPointer<class NmMessageCreationOperation> NmUiEngine::createReplyMessage(class NmId const &, class NmId const &, bool)
-	?getStandardFolderId@NmDataManager@@QAE?AVNmId@@ABV2@W4NmFolderType@@@Z @ 286 NONAME ; class NmId NmDataManager::getStandardFolderId(class NmId const &, enum NmFolderType)
-	?address@NmMailboxMetaData@@QBE?AVQString@@XZ @ 287 NONAME ; class QString NmMailboxMetaData::address(void) const
-	?dividersActive@NmMessageListModel@@QAE_NXZ @ 288 NONAME ; bool NmMessageListModel::dividersActive(void)
-	?titleDivider@NmMessageListModelItem@@QBE?AVQString@@XZ @ 289 NONAME ; class QString NmMessageListModelItem::titleDivider(void) const
-	?getStaticMetaObject@NmBaseClientPlugin@@SAABUQMetaObject@@XZ @ 290 NONAME ; struct QMetaObject const & NmBaseClientPlugin::getStaticMetaObject(void)
-	?qt_metacast@NmMessageCreationOperation@@UAEPAXPBD@Z @ 291 NONAME ; void * NmMessageCreationOperation::qt_metacast(char const *)
-	?updateEnvelope@NmMessageListModel@@AAEXW4NmEnvelopeProperties@@ABVNmId@@@Z @ 292 NONAME ; void NmMessageListModel::updateEnvelope(enum NmEnvelopeProperties, class NmId const &)
-	??_ENmDataManager@@UAE@I@Z @ 293 NONAME ; NmDataManager::~NmDataManager(unsigned int)
-	?qt_metacast@NmMailboxListModel@@UAEPAXPBD@Z @ 294 NONAME ; void * NmMailboxListModel::qt_metacast(char const *)
-	?search@NmUiEngine@@QAEHABVNmId@@ABVQStringList@@@Z @ 295 NONAME ; int NmUiEngine::search(class NmId const &, class QStringList const &)
-	?setEnvelopes@NmUiEngine@@QAE?AV?$QPointer@VNmStoreEnvelopesOperation@@@@ABVNmId@@0W4NmEnvelopeProperties@@ABV?$QList@PB$$CBVNmMessageEnvelope@@@@@Z @ 296 NONAME ; class QPointer<class NmStoreEnvelopesOperation> NmUiEngine::setEnvelopes(class NmId const &, class NmId const &, enum NmEnvelopeProperties, class QList<class NmMessageEnvelope const *> const &)
-	?getActions@NmBaseClientPlugin@@UAEXABVNmActionRequest@@AAV?$QList@PAVNmAction@@@@@Z @ 297 NONAME ; void NmBaseClientPlugin::getActions(class NmActionRequest const &, class QList<class NmAction *> &)
-	?qt_metacast@NmStoreEnvelopesOperation@@UAEPAXPBD@Z @ 298 NONAME ; void * NmStoreEnvelopesOperation::qt_metacast(char const *)
-	??_ENmMailboxMetaData@@UAE@I@Z @ 299 NONAME ; NmMailboxMetaData::~NmMailboxMetaData(unsigned int)
-	??0NmMessageListModelItem@@QAE@XZ @ 300 NONAME ; NmMessageListModelItem::NmMessageListModelItem(void)
-	?tr@NmAddAttachmentsOperation@@SA?AVQString@@PBD0H@Z @ 301 NONAME ; class QString NmAddAttachmentsOperation::tr(char const *, char const *, int)
-	?setDividers@NmMessageListModel@@QAEX_N@Z @ 302 NONAME ; void NmMessageListModel::setDividers(bool)
-	?loadPlugin@NmDataPluginFactory@@QAEPAVQObject@@ABVQDir@@ABVQString@@@Z @ 303 NONAME ; class QObject * NmDataPluginFactory::loadPlugin(class QDir const &, class QString const &)
-	?qt_metacast@NmOperation@@UAEPAXPBD@Z @ 304 NONAME ; void * NmOperation::qt_metacast(char const *)
-	?tr@NmMessageListModel@@SA?AVQString@@PBD0H@Z @ 305 NONAME ; class QString NmMessageListModel::tr(char const *, char const *, int)
-	?removeAttachment@NmUiEngine@@QAE?AV?$QPointer@VNmOperation@@@@ABVNmMessage@@ABVNmId@@@Z @ 306 NONAME ; class QPointer<class NmOperation> NmUiEngine::removeAttachment(class NmMessage const &, class NmId const &)
-	?staticMetaObject@NmMessageListModel@@2UQMetaObject@@B @ 307 NONAME ; struct QMetaObject const NmMessageListModel::staticMetaObject
-	?qt_metacall@NmAddAttachmentsOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 308 NONAME ; int NmAddAttachmentsOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@NmUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 309 NONAME ; int NmUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?message@NmDataManager@@QAEPAVNmMessage@@ABVNmId@@00@Z @ 310 NONAME ; class NmMessage * NmDataManager::message(class NmId const &, class NmId const &, class NmId const &)
-	?metaObject@NmOperation@@UBEPBUQMetaObject@@XZ @ 311 NONAME ; struct QMetaObject const * NmOperation::metaObject(void) const
-	?messageEventForListModel@NmUiEngine@@AAEXW4NmMessageEvent@@ABVNmId@@ABV?$QList@VNmId@@@@1@Z @ 312 NONAME ; void NmUiEngine::messageEventForListModel(enum NmMessageEvent, class NmId const &, class QList<class NmId> const &, class NmId const &)
+	?getPluginIdByMailboxId@NmUiEngine@@QAE?AVNmId@@I@Z @ 71 NONAME ; class NmId NmUiEngine::getPluginIdByMailboxId(unsigned int)
+	?applicationStateInterfaceInstance@NmDataPluginFactory@@AAEPAVNmApplicationStateInterface@@PAVQObject@@@Z @ 72 NONAME ; class NmApplicationStateInterface * NmDataPluginFactory::applicationStateInterfaceInstance(class QObject *)
+	?metaObject@NmMessageListModel@@UBEPBUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const * NmMessageListModel::metaObject(void) const
+	?messageBeingSent@NmUiEngine@@QBEPBVNmMessage@@XZ @ 74 NONAME ; class NmMessage const * NmUiEngine::messageBeingSent(void) const
+	?handleMailboxEvent@NmUiEngine@@AAEXW4NmMailboxEvent@@ABV?$QList@VNmId@@@@@Z @ 75 NONAME ; void NmUiEngine::handleMailboxEvent(enum NmMailboxEvent, class QList<class NmId> const &)
+	?interfaceInstance@NmDataPluginFactory@@QAEPAVNmDataPluginInterface@@VNmId@@@Z @ 76 NONAME ; class NmDataPluginInterface * NmDataPluginFactory::interfaceInstance(class NmId)
+	?goOffline@NmBaseClientPlugin@@AAEXABVNmId@@@Z @ 77 NONAME ; void NmBaseClientPlugin::goOffline(class NmId const &)
+	?sendMessage@NmUiEngine@@QAEXPAVNmMessage@@ABV?$QList@PAVNmOperation@@@@@Z @ 78 NONAME ; void NmUiEngine::sendMessage(class NmMessage *, class QList<class NmOperation *> const &)
+	?tr@NmDataManager@@SA?AVQString@@PBD0H@Z @ 79 NONAME ; class QString NmDataManager::tr(char const *, char const *, int)
+	??0NmMailboxListModel@@QAE@AAVNmDataManager@@PAVQObject@@@Z @ 80 NONAME ; NmMailboxListModel::NmMailboxListModel(class NmDataManager &, class QObject *)
+	?handleMessageEvent@NmMessageListModel@@QAEXW4NmMessageEvent@@ABVNmId@@ABV?$QList@VNmId@@@@1@Z @ 81 NONAME ; void NmMessageListModel::handleMessageEvent(enum NmMessageEvent, class NmId const &, class QList<class NmId> const &, class NmId const &)
+	?setPriorityNormal@NmBaseClientPlugin@@QAEXXZ @ 82 NONAME ; void NmBaseClientPlugin::setPriorityNormal(void)
+	??_ENmMessageSendingOperation@@UAE@I@Z @ 83 NONAME ; NmMessageSendingOperation::~NmMessageSendingOperation(unsigned int)
+	?changed@NmMessageListModel@@AAE_NABVNmMessageEnvelope@@0@Z @ 84 NONAME ; bool NmMessageListModel::changed(class NmMessageEnvelope const &, class NmMessageEnvelope const &)
+	?openAttachment@NmBaseClientPlugin@@QAEXXZ @ 85 NONAME ; void NmBaseClientPlugin::openAttachment(void)
+	?staticMetaObject@NmMessageCreationOperation@@2UQMetaObject@@B @ 86 NONAME ; struct QMetaObject const NmMessageCreationOperation::staticMetaObject
+	?handleMailboxEvent@NmMailboxListModel@@QAEXW4NmMailboxEvent@@ABV?$QList@VNmId@@@@@Z @ 87 NONAME ; void NmMailboxListModel::handleMailboxEvent(enum NmMailboxEvent, class QList<class NmId> const &)
+	?metaObject@NmStoreEnvelopesOperation@@UBEPBUQMetaObject@@XZ @ 88 NONAME ; struct QMetaObject const * NmStoreEnvelopesOperation::metaObject(void) const
+	?trUtf8@NmMailboxListModel@@SA?AVQString@@PBD0H@Z @ 89 NONAME ; class QString NmMailboxListModel::trUtf8(char const *, char const *, int)
+	?mPluginArray@NmDataPluginFactory@@0PAV?$QList@PAVQObject@@@@A @ 90 NONAME ; class QList<class QObject *> * NmDataPluginFactory::mPluginArray
+	?instance@NmDataPluginFactory@@SAPAV1@XZ @ 91 NONAME ; class NmDataPluginFactory * NmDataPluginFactory::instance(void)
+	?getStaticMetaObject@NmMessageListModel@@SAABUQMetaObject@@XZ @ 92 NONAME ; struct QMetaObject const & NmMessageListModel::getStaticMetaObject(void)
+	?deleteMessageFromViewerView@NmBaseClientPlugin@@QAEXXZ @ 93 NONAME ; void NmBaseClientPlugin::deleteMessageFromViewerView(void)
+	?tr@NmUiEngine@@SA?AVQString@@PBD0H@Z @ 94 NONAME ; class QString NmUiEngine::tr(char const *, char const *, int)
+	?refresh@NmMessageListModel@@QAEXVNmId@@0ABV?$QList@PAVNmMessageEnvelope@@@@@Z @ 95 NONAME ; void NmMessageListModel::refresh(class NmId, class NmId, class QList<class NmMessageEnvelope *> const &)
+	?mailboxById@NmUiEngine@@QAEPAVNmMailboxMetaData@@ABVNmId@@@Z @ 96 NONAME ; class NmMailboxMetaData * NmUiEngine::mailboxById(class NmId const &)
+	?createNewMessage@NmUiEngine@@QAE?AV?$QPointer@VNmMessageCreationOperation@@@@ABVNmId@@@Z @ 97 NONAME ; class QPointer<class NmMessageCreationOperation> NmUiEngine::createNewMessage(class NmId const &)
+	??_ENmMessageListModelItem@@UAE@I@Z @ 98 NONAME ; NmMessageListModelItem::~NmMessageListModelItem(unsigned int)
+	?replyAllMail@NmBaseClientPlugin@@QAEXXZ @ 99 NONAME ; void NmBaseClientPlugin::replyAllMail(void)
+	?handleMatchFound@NmUiEngine@@AAEXABVNmId@@0@Z @ 100 NONAME ; void NmUiEngine::handleMatchFound(class NmId const &, class NmId const &)
+	?syncStateEvent@NmUiEngine@@IAEXW4NmSyncState@@ABVNmId@@@Z @ 101 NONAME ; void NmUiEngine::syncStateEvent(enum NmSyncState, class NmId const &)
+	?refreshModelItem@NmMailboxListModel@@QAEXABVNmId@@@Z @ 102 NONAME ; void NmMailboxListModel::refreshModelItem(class NmId const &)
+	?trUtf8@NmDataManager@@SA?AVQString@@PBD0@Z @ 103 NONAME ; class QString NmDataManager::trUtf8(char const *, char const *)
+	?setEnvelopeProperties@NmMessageListModel@@QAEXW4NmEnvelopeProperties@@ABV?$QList@VNmId@@@@@Z @ 104 NONAME ; void NmMessageListModel::setEnvelopeProperties(enum NmEnvelopeProperties, class QList<class NmId> const &)
+	??1NmStoreEnvelopesOperation@@MAE@XZ @ 105 NONAME ; NmStoreEnvelopesOperation::~NmStoreEnvelopesOperation(void)
+	?tr@NmUiEngine@@SA?AVQString@@PBD0@Z @ 106 NONAME ; class QString NmUiEngine::tr(char const *, char const *)
+	?mPluginLoaderArray@NmDataPluginFactory@@0V?$QList@PAVQPluginLoader@@@@A @ 107 NONAME ; class QList<class QPluginLoader *> NmDataPluginFactory::mPluginLoaderArray
+	?trUtf8@NmBaseClientPlugin@@SA?AVQString@@PBD0@Z @ 108 NONAME ; class QString NmBaseClientPlugin::trUtf8(char const *, char const *)
+	?deleteOperation@NmOperation@@AAEXXZ @ 109 NONAME ; void NmOperation::deleteOperation(void)
+	?trUtf8@NmBaseClientPlugin@@SA?AVQString@@PBD0H@Z @ 110 NONAME ; class QString NmBaseClientPlugin::trUtf8(char const *, char const *, int)
+	?createViewerViewCommands@NmBaseClientPlugin@@AAEXABVNmActionRequest@@AAV?$QList@PAVNmAction@@@@@Z @ 111 NONAME ; void NmBaseClientPlugin::createViewerViewCommands(class NmActionRequest const &, class QList<class NmAction *> &)
+	?fetchMessagePart@NmUiEngine@@QAE?AV?$QPointer@VNmOperation@@@@ABVNmId@@000@Z @ 112 NONAME ; class QPointer<class NmOperation> NmUiEngine::fetchMessagePart(class NmId const &, class NmId const &, class NmId const &, class NmId const &)
+	?tr@NmMailboxListModel@@SA?AVQString@@PBD0H@Z @ 113 NONAME ; class QString NmMailboxListModel::tr(char const *, char const *, int)
+	?handleConnectEvent@NmUiEngine@@QAEXW4NmConnectState@@ABVNmId@@H@Z @ 114 NONAME ; void NmUiEngine::handleConnectEvent(enum NmConnectState, class NmId const &, int)
+	?trUtf8@NmUiEngine@@SA?AVQString@@PBD0H@Z @ 115 NONAME ; class QString NmUiEngine::trUtf8(char const *, char const *, int)
+	?createMailboxItem@NmMailboxListModel@@AAEPAVNmMailboxListModelItem@@PBVNmMailbox@@@Z @ 116 NONAME ; class NmMailboxListModelItem * NmMailboxListModel::createMailboxItem(class NmMailbox const *)
+	?setTitleDivider@NmMessageListModelItem@@QAEXABVQString@@@Z @ 117 NONAME ; void NmMessageListModelItem::setTitleDivider(class QString const &)
+	?markAsRead@NmBaseClientPlugin@@QAEXXZ @ 118 NONAME ; void NmBaseClientPlugin::markAsRead(void)
+	?getInsertionIndex@NmMessageListModel@@ABEHABVNmMessageEnvelope@@@Z @ 119 NONAME ; int NmMessageListModel::getInsertionIndex(class NmMessageEnvelope const &) const
+	?updateOperationProgress@NmOperation@@QAEXH@Z @ 120 NONAME ; void NmOperation::updateOperationProgress(int)
+	?messageEventForListModel@NmUiEngine@@AAEXW4NmMessageEvent@@ABVNmId@@ABV?$QList@VNmId@@@@1@Z @ 121 NONAME ; void NmUiEngine::messageEventForListModel(enum NmMessageEvent, class NmId const &, class QList<class NmId> const &, class NmId const &)
+	??1NmFolderListModel@@UAE@XZ @ 122 NONAME ; NmFolderListModel::~NmFolderListModel(void)
+	?operationCompleted@NmUiEngine@@IAEXABVNmOperationCompletionEvent@@@Z @ 123 NONAME ; void NmUiEngine::operationCompleted(class NmOperationCompletionEvent const &)
+	??1NmDataManager@@UAE@XZ @ 124 NONAME ; NmDataManager::~NmDataManager(void)
+	?trUtf8@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0@Z @ 125 NONAME ; class QString NmStoreEnvelopesOperation::trUtf8(char const *, char const *)
+	?setAddress@NmMailboxMetaData@@QAEXABVQString@@@Z @ 126 NONAME ; void NmMailboxMetaData::setAddress(class QString const &)
+	?getStaticMetaObject@NmMessageCreationOperation@@SAABUQMetaObject@@XZ @ 127 NONAME ; struct QMetaObject const & NmMessageCreationOperation::getStaticMetaObject(void)
+	?updateActiveFolder@NmUiEngine@@QAEXABVNmId@@0@Z @ 128 NONAME ; void NmUiEngine::updateActiveFolder(class NmId const &, class NmId const &)
+	?trUtf8@NmAddAttachmentsOperation@@SA?AVQString@@PBD0@Z @ 129 NONAME ; class QString NmAddAttachmentsOperation::trUtf8(char const *, char const *)
+	?name@NmMailboxMetaData@@QBE?AVQString@@XZ @ 130 NONAME ; class QString NmMailboxMetaData::name(void) const
+	?qt_metacall@NmDataManager@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 131 NONAME ; int NmDataManager::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?runAsyncOperation@NmOperation@@MAEXXZ @ 132 NONAME ; void NmOperation::runAsyncOperation(void)
+	??0NmFolderListModel@@QAE@AAVNmDataManager@@PAVQObject@@@Z @ 133 NONAME ; NmFolderListModel::NmFolderListModel(class NmDataManager &, class QObject *)
+	?folderTypeById@NmDataManager@@QAE?AW4NmFolderType@@VNmId@@0@Z @ 134 NONAME ; enum NmFolderType NmDataManager::folderTypeById(class NmId, class NmId)
+	?tr@NmBaseClientPlugin@@SA?AVQString@@PBD0H@Z @ 135 NONAME ; class QString NmBaseClientPlugin::tr(char const *, char const *, int)
+	??0NmMailboxMetaData@@QAE@XZ @ 136 NONAME ; NmMailboxMetaData::NmMailboxMetaData(void)
+	?setEnvelope@NmMessageListModelItem@@QAEXPAVNmMessageEnvelope@@@Z @ 137 NONAME ; void NmMessageListModelItem::setEnvelope(class NmMessageEnvelope *)
+	?saveMessage@NmUiEngine@@QAEHABVNmMessage@@@Z @ 138 NONAME ; int NmUiEngine::saveMessage(class NmMessage const &)
+	?setId@NmMailboxMetaData@@QAEXABVNmId@@@Z @ 139 NONAME ; void NmMailboxMetaData::setId(class NmId const &)
+	?folderTypeById@NmUiEngine@@QAE?AW4NmFolderType@@VNmId@@0@Z @ 140 NONAME ; enum NmFolderType NmUiEngine::folderTypeById(class NmId, class NmId)
+	?mReferenceCount@NmDataPluginFactory@@0HA @ 141 NONAME ; int NmDataPluginFactory::mReferenceCount
+	?tr@NmOperation@@SA?AVQString@@PBD0@Z @ 142 NONAME ; class QString NmOperation::tr(char const *, char const *)
+	?updateMessageEnvelope@NmMessageListModel@@AAEXABVNmId@@00@Z @ 143 NONAME ; void NmMessageListModel::updateMessageEnvelope(class NmId const &, class NmId const &, class NmId const &)
+	?tr@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0@Z @ 144 NONAME ; class QString NmStoreEnvelopesOperation::tr(char const *, char const *)
+	?messagesBelongUnderSameDivider@NmMessageListModel@@ABE_NPBVNmMessageEnvelope@@0@Z @ 145 NONAME ; bool NmMessageListModel::messagesBelongUnderSameDivider(class NmMessageEnvelope const *, class NmMessageEnvelope const *) const
+	?matchFound@NmUiEngine@@IAEXABVNmId@@0@Z @ 146 NONAME ; void NmUiEngine::matchFound(class NmId const &, class NmId const &)
+	?metaObject@NmDataManager@@UBEPBUQMetaObject@@XZ @ 147 NONAME ; struct QMetaObject const * NmDataManager::metaObject(void) const
+	?isSendingMessage@NmUiEngine@@QBE_NXZ @ 148 NONAME ; bool NmUiEngine::isSendingMessage(void) const
+	?freeIcons@NmIcons@@SAXXZ @ 149 NONAME ; void NmIcons::freeIcons(void)
+	?tr@NmAddAttachmentsOperation@@SA?AVQString@@PBD0@Z @ 150 NONAME ; class QString NmAddAttachmentsOperation::tr(char const *, char const *)
+	?itemFromModel@NmMessageListModel@@AAEPAVNmMessageListModelItem@@ABVNmId@@@Z @ 151 NONAME ; class NmMessageListModelItem * NmMessageListModel::itemFromModel(class NmId const &)
+	?instance@NmUiEngine@@SAPAV1@XZ @ 152 NONAME ; class NmUiEngine * NmUiEngine::instance(void)
+	?createMessageListCommands@NmBaseClientPlugin@@AAEXABVNmActionRequest@@AAV?$QList@PAVNmAction@@@@@Z @ 153 NONAME ; void NmBaseClientPlugin::createMessageListCommands(class NmActionRequest const &, class QList<class NmAction *> &)
+	?updateEnvelopeProperty@NmBaseClientPlugin@@AAEXW4NmEnvelopeProperties@@@Z @ 154 NONAME ; void NmBaseClientPlugin::updateEnvelopeProperty(enum NmEnvelopeProperties)
+	??1NmAddAttachmentsOperation@@MAE@XZ @ 155 NONAME ; NmAddAttachmentsOperation::~NmAddAttachmentsOperation(void)
+	?goOffline@NmUiEngine@@QAEHABVNmId@@@Z @ 156 NONAME ; int NmUiEngine::goOffline(class NmId const &)
+	?staticMetaObject@NmDataManager@@2UQMetaObject@@B @ 157 NONAME ; struct QMetaObject const NmDataManager::staticMetaObject
+	?mInstance@NmUiEngine@@0PAV1@A @ 158 NONAME ; class NmUiEngine * NmUiEngine::mInstance
+	?attach@NmBaseClientPlugin@@QAEXXZ @ 159 NONAME ; void NmBaseClientPlugin::attach(void)
+	?setIgnoreFolderIds@NmMessageListModel@@QAEX_N@Z @ 160 NONAME ; void NmMessageListModel::setIgnoreFolderIds(bool)
+	?metaObject@NmAddAttachmentsOperation@@UBEPBUQMetaObject@@XZ @ 161 NONAME ; struct QMetaObject const * NmAddAttachmentsOperation::metaObject(void) const
+	?refresh@NmFolderListModel@@QAEXAAV?$QList@PAVNmFolder@@@@@Z @ 162 NONAME ; void NmFolderListModel::refresh(class QList<class NmFolder *> &)
+	?handleCompletedRemoveDraftOperation@NmUiEngine@@QAEXXZ @ 163 NONAME ; void NmUiEngine::handleCompletedRemoveDraftOperation(void)
+	?trUtf8@NmMailboxListModel@@SA?AVQString@@PBD0@Z @ 164 NONAME ; class QString NmMailboxListModel::trUtf8(char const *, char const *)
+	?envelopeById@NmDataManager@@QAEPAVNmMessageEnvelope@@ABVNmId@@00@Z @ 165 NONAME ; class NmMessageEnvelope * NmDataManager::envelopeById(class NmId const &, class NmId const &, class NmId const &)
+	?getStaticMetaObject@NmOperation@@SAABUQMetaObject@@XZ @ 166 NONAME ; struct QMetaObject const & NmOperation::getStaticMetaObject(void)
+	?trUtf8@NmOperation@@SA?AVQString@@PBD0@Z @ 167 NONAME ; class QString NmOperation::trUtf8(char const *, char const *)
+	?addAttachments@NmUiEngine@@QAE?AV?$QPointer@VNmAddAttachmentsOperation@@@@ABVNmMessage@@ABV?$QList@VQString@@@@@Z @ 168 NONAME ; class QPointer<class NmAddAttachmentsOperation> NmUiEngine::addAttachments(class NmMessage const &, class QList<class QString> const &)
+	?doCancelOperation@NmOperation@@MAEXXZ @ 169 NONAME ; void NmOperation::doCancelOperation(void)
+	?tr@NmOperation@@SA?AVQString@@PBD0H@Z @ 170 NONAME ; class QString NmOperation::tr(char const *, char const *, int)
+	??_ENmOperation@@UAE@I@Z @ 171 NONAME ; NmOperation::~NmOperation(unsigned int)
+	?tr@NmMessageCreationOperation@@SA?AVQString@@PBD0@Z @ 172 NONAME ; class QString NmMessageCreationOperation::tr(char const *, char const *)
+	?qt_metacall@NmMessageListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 173 NONAME ; int NmMessageListModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?staticMetaObject@NmOperation@@2UQMetaObject@@B @ 174 NONAME ; struct QMetaObject const NmOperation::staticMetaObject
+	??1NmUiEngine@@EAE@XZ @ 175 NONAME ; NmUiEngine::~NmUiEngine(void)
+	?messagePartFile@NmUiEngine@@QAE?AVXQSharableFile@@ABVNmId@@000@Z @ 176 NONAME ; class XQSharableFile NmUiEngine::messagePartFile(class NmId const &, class NmId const &, class NmId const &, class NmId const &)
+	??_ENmMessageListModel@@UAE@I@Z @ 177 NONAME ; NmMessageListModel::~NmMessageListModel(unsigned int)
+	?addPreliminaryOperation@NmOperation@@QAEXPAV1@@Z @ 178 NONAME ; void NmOperation::addPreliminaryOperation(class NmOperation *)
+	?deleteMessages@NmUiEngine@@QAEHABVNmId@@0ABV?$QList@VNmId@@@@@Z @ 179 NONAME ; int NmUiEngine::deleteMessages(class NmId const &, class NmId const &, class QList<class NmId> const &)
+	??_ENmStoreEnvelopesOperation@@UAE@I@Z @ 180 NONAME ; NmStoreEnvelopesOperation::~NmStoreEnvelopesOperation(unsigned int)
+	?mailboxById@NmDataManager@@QAEPAVNmMailboxMetaData@@ABVNmId@@@Z @ 181 NONAME ; class NmMailboxMetaData * NmDataManager::mailboxById(class NmId const &)
+	?messageListModelForSearch@NmUiEngine@@QAEAAVNmMessageListModel@@ABVNmId@@@Z @ 182 NONAME ; class NmMessageListModel & NmUiEngine::messageListModelForSearch(class NmId const &)
+	?search@NmBaseClientPlugin@@QAEXXZ @ 183 NONAME ; void NmBaseClientPlugin::search(void)
+	?pluginInstances@NmDataPluginFactory@@QAEPAV?$QList@PAVQObject@@@@XZ @ 184 NONAME ; class QList<class QObject *> * NmDataPluginFactory::pluginInstances(void)
+	?tr@NmBaseClientPlugin@@SA?AVQString@@PBD0@Z @ 185 NONAME ; class QString NmBaseClientPlugin::tr(char const *, char const *)
+	?listMessages@NmDataManager@@QAEXABVNmId@@0AAV?$QList@PAVNmMessageEnvelope@@@@@Z @ 186 NONAME ; void NmDataManager::listMessages(class NmId const &, class NmId const &, class QList<class NmMessageEnvelope *> &)
+	??1NmBaseClientPlugin@@UAE@XZ @ 187 NONAME ; NmBaseClientPlugin::~NmBaseClientPlugin(void)
+	?qt_metacast@NmDataManager@@UAEPAXPBD@Z @ 188 NONAME ; void * NmDataManager::qt_metacast(char const *)
+	??0NmMessageCreationOperation@@QAE@XZ @ 189 NONAME ; NmMessageCreationOperation::NmMessageCreationOperation(void)
+	?qt_metacall@NmBaseClientPlugin@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 190 NONAME ; int NmBaseClientPlugin::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?envelopePtr@NmMessageListModelItem@@QAEPAVNmMessageEnvelope@@XZ @ 191 NONAME ; class NmMessageEnvelope * NmMessageListModelItem::envelopePtr(void)
+	?messageListModel@NmUiEngine@@QAEAAVNmMessageListModel@@ABVNmId@@0@Z @ 192 NONAME ; class NmMessageListModel & NmUiEngine::messageListModel(class NmId const &, class NmId const &)
+	??1NmMailboxMetaData@@UAE@XZ @ 193 NONAME ; NmMailboxMetaData::~NmMailboxMetaData(void)
+	?connectionEvent@NmUiEngine@@IAEXW4NmConnectState@@ABVNmId@@@Z @ 194 NONAME ; void NmUiEngine::connectionEvent(enum NmConnectState, class NmId const &)
+	?mailbox@NmDataManager@@QAEPAVNmMailbox@@ABVNmId@@@Z @ 195 NONAME ; class NmMailbox * NmDataManager::mailbox(class NmId const &)
+	?interfaceInstance@NmDataPluginFactory@@QAEPAVNmDataPluginInterface@@PAVQObject@@@Z @ 196 NONAME ; class NmDataPluginInterface * NmDataPluginFactory::interfaceInstance(class QObject *)
+	?metaObject@NmMailboxListModel@@UBEPBUQMetaObject@@XZ @ 197 NONAME ; struct QMetaObject const * NmMailboxListModel::metaObject(void) const
+	?IconId@NmMailboxMetaData@@QBE?AVNmId@@XZ @ 198 NONAME ; class NmId NmMailboxMetaData::IconId(void) const
+	?sendOperationCompleted@NmUiEngine@@IAEXXZ @ 199 NONAME ; void NmUiEngine::sendOperationCompleted(void)
+	??0NmFolderMetaData@@QAE@XZ @ 200 NONAME ; NmFolderMetaData::NmFolderMetaData(void)
+	?staticMetaObject@NmAddAttachmentsOperation@@2UQMetaObject@@B @ 201 NONAME ; struct QMetaObject const NmAddAttachmentsOperation::staticMetaObject
+	?connectionState@NmUiEngine@@QAE?AW4NmConnectState@@ABVNmId@@@Z @ 202 NONAME ; enum NmConnectState NmUiEngine::connectionState(class NmId const &)
+	?createTitleDividerItem@NmMessageListModel@@AAEPAVNmMessageListModelItem@@PAVNmMessageEnvelope@@@Z @ 203 NONAME ; class NmMessageListModelItem * NmMessageListModel::createTitleDividerItem(class NmMessageEnvelope *)
+	?setId@NmFolderMetaData@@QAEXABVNmId@@@Z @ 204 NONAME ; void NmFolderMetaData::setId(class NmId const &)
+	??0NmOperation@@QAE@XZ @ 205 NONAME ; NmOperation::NmOperation(void)
+	?cancelOperation@NmOperation@@QAEXXZ @ 206 NONAME ; void NmOperation::cancelOperation(void)
+	??_ENmFolderMetaData@@UAE@I@Z @ 207 NONAME ; NmFolderMetaData::~NmFolderMetaData(unsigned int)
+	?qt_metacast@NmMessageListModel@@UAEPAXPBD@Z @ 208 NONAME ; void * NmMessageListModel::qt_metacast(char const *)
+	?operationProgressChanged@NmOperation@@IAEXH@Z @ 209 NONAME ; void NmOperation::operationProgressChanged(int)
+	?trUtf8@NmOperation@@SA?AVQString@@PBD0H@Z @ 210 NONAME ; class QString NmOperation::trUtf8(char const *, char const *, int)
+	??_ENmMailboxListModel@@UAE@I@Z @ 211 NONAME ; NmMailboxListModel::~NmMailboxListModel(unsigned int)
+	?messageDeleted@NmUiEngine@@IAEXABVNmId@@00@Z @ 212 NONAME ; void NmUiEngine::messageDeleted(class NmId const &, class NmId const &, class NmId const &)
+	?trUtf8@NmMessageCreationOperation@@SA?AVQString@@PBD0@Z @ 213 NONAME ; class QString NmMessageCreationOperation::trUtf8(char const *, char const *)
+	?metaObject@NmUiEngine@@UBEPBUQMetaObject@@XZ @ 214 NONAME ; struct QMetaObject const * NmUiEngine::metaObject(void) const
+	??_ENmBaseClientPlugin@@UAE@I@Z @ 215 NONAME ; NmBaseClientPlugin::~NmBaseClientPlugin(unsigned int)
+	?markAsUnread@NmBaseClientPlugin@@QAEXXZ @ 216 NONAME ; void NmBaseClientPlugin::markAsUnread(void)
+	?metaObject@NmBaseClientPlugin@@UBEPBUQMetaObject@@XZ @ 217 NONAME ; struct QMetaObject const * NmBaseClientPlugin::metaObject(void) const
+	?tr@NmDataManager@@SA?AVQString@@PBD0@Z @ 218 NONAME ; class QString NmDataManager::tr(char const *, char const *)
+	?mailboxListModel@NmUiEngine@@QAEAAVNmMailboxListModel@@XZ @ 219 NONAME ; class NmMailboxListModel & NmUiEngine::mailboxListModel(void)
+	?fetchMessage@NmUiEngine@@QAE?AV?$QPointer@VNmOperation@@@@ABVNmId@@00@Z @ 220 NONAME ; class QPointer<class NmOperation> NmUiEngine::fetchMessage(class NmId const &, class NmId const &, class NmId const &)
+	?setIconId@NmMailboxMetaData@@QAEXABVNmId@@@Z @ 221 NONAME ; void NmMailboxMetaData::setIconId(class NmId const &)
+	??1NmDataPluginFactory@@EAE@XZ @ 222 NONAME ; NmDataPluginFactory::~NmDataPluginFactory(void)
+	?refreshMailboxListModel@NmUiEngine@@QAEXXZ @ 223 NONAME ; void NmUiEngine::refreshMailboxListModel(void)
+	?qt_metacall@NmStoreEnvelopesOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 224 NONAME ; int NmStoreEnvelopesOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@NmMessageListModel@@SA?AVQString@@PBD0@Z @ 225 NONAME ; class QString NmMessageListModel::trUtf8(char const *, char const *)
+	?rowCount@NmFolderListModel@@UBEHABVQModelIndex@@@Z @ 226 NONAME ; int NmFolderListModel::rowCount(class QModelIndex const &) const
+	?doUpdateOperationProgress@NmOperation@@MAEXXZ @ 227 NONAME ; void NmOperation::doUpdateOperationProgress(void)
+	?tr@NmMailboxListModel@@SA?AVQString@@PBD0@Z @ 228 NONAME ; class QString NmMailboxListModel::tr(char const *, char const *)
+	?removeMessage@NmUiEngine@@QAEHABVNmId@@00@Z @ 229 NONAME ; int NmUiEngine::removeMessage(class NmId const &, class NmId const &, class NmId const &)
+	??_ENmUiEngine@@UAE@I@Z @ 230 NONAME ; NmUiEngine::~NmUiEngine(unsigned int)
+	?operationCompleted@NmOperation@@IAEXH@Z @ 231 NONAME ; void NmOperation::operationCompleted(int)
+	?callEmitDataChanged@NmMessageListModelItem@@QAEXXZ @ 232 NONAME ; void NmMessageListModelItem::callEmitDataChanged(void)
+	?handleRequest@NmBaseClientPlugin@@IAEXW4NmActionResponseCommand@@ABVNmActionRequest@@@Z @ 233 NONAME ; void NmBaseClientPlugin::handleRequest(enum NmActionResponseCommand, class NmActionRequest const &)
+	??0NmMessageListModel@@QAE@AAVNmDataManager@@PAVQObject@@@Z @ 234 NONAME ; NmMessageListModel::NmMessageListModel(class NmDataManager &, class QObject *)
+	??_ENmAddAttachmentsOperation@@UAE@I@Z @ 235 NONAME ; NmAddAttachmentsOperation::~NmAddAttachmentsOperation(unsigned int)
+	?syncState@NmUiEngine@@QAE?AW4NmSyncState@@ABVNmId@@@Z @ 236 NONAME ; enum NmSyncState NmUiEngine::syncState(class NmId const &)
+	??1NmOperation@@MAE@XZ @ 237 NONAME ; NmOperation::~NmOperation(void)
+	?tr@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0H@Z @ 238 NONAME ; class QString NmStoreEnvelopesOperation::tr(char const *, char const *, int)
+	?listMailboxes@NmDataManager@@QAEXAAV?$QList@PAVNmMailbox@@@@@Z @ 239 NONAME ; void NmDataManager::listMailboxes(class QList<class NmMailbox *> &)
+	?message@NmUiEngine@@QAEPAVNmMessage@@ABVNmId@@00@Z @ 240 NONAME ; class NmMessage * NmUiEngine::message(class NmId const &, class NmId const &, class NmId const &)
+	?refreshMailbox@NmUiEngine@@QAEHABVNmId@@@Z @ 241 NONAME ; int NmUiEngine::refreshMailbox(class NmId const &)
+	?trUtf8@NmUiEngine@@SA?AVQString@@PBD0@Z @ 242 NONAME ; class QString NmUiEngine::trUtf8(char const *, char const *)
+	?contentToMessagePart@NmUiEngine@@QAEHABVNmId@@00AAVNmMessagePart@@@Z @ 243 NONAME ; int NmUiEngine::contentToMessagePart(class NmId const &, class NmId const &, class NmId const &, class NmMessagePart &)
+	?removeItem@NmMessageListModel@@AAEXHAAVNmMessageListModelItem@@@Z @ 244 NONAME ; void NmMessageListModel::removeItem(int, class NmMessageListModelItem &)
+	??1NmMailboxListModel@@UAE@XZ @ 245 NONAME ; NmMailboxListModel::~NmMailboxListModel(void)
+	??0NmBaseClientPlugin@@QAE@XZ @ 246 NONAME ; NmBaseClientPlugin::NmBaseClientPlugin(void)
+	?forwardMail@NmBaseClientPlugin@@QAEXXZ @ 247 NONAME ; void NmBaseClientPlugin::forwardMail(void)
+	?setItemType@NmMessageListModelItem@@QAEXW4NmMessageItemType@1@@Z @ 248 NONAME ; void NmMessageListModelItem::setItemType(enum NmMessageListModelItem::NmMessageItemType)
+	??_ENmDataPluginFactory@@UAE@I@Z @ 249 NONAME ; NmDataPluginFactory::~NmDataPluginFactory(unsigned int)
+	?mailboxListChanged@NmBaseClientPlugin@@AAEXABVNmId@@W4MailboxEventType@NmSettings@@@Z @ 250 NONAME ; void NmBaseClientPlugin::mailboxListChanged(class NmId const &, enum NmSettings::MailboxEventType)
+	?expanded@NmMessageListModelItem@@QBE_NXZ @ 251 NONAME ; bool NmMessageListModelItem::expanded(void) const
+	?columnCount@NmFolderListModel@@UBEHABVQModelIndex@@@Z @ 252 NONAME ; int NmFolderListModel::columnCount(class QModelIndex const &) const
+	?pluginInstance@NmDataPluginFactory@@QAEPAVQObject@@VNmId@@@Z @ 253 NONAME ; class QObject * NmDataPluginFactory::pluginInstance(class NmId)
+	?setNewParam@NmMessageListModel@@IAEXPAVNmUiStartParam@@@Z @ 254 NONAME ; void NmMessageListModel::setNewParam(class NmUiStartParam *)
+	?data@NmMessageListModel@@UBE?AVQVariant@@ABVQModelIndex@@H@Z @ 255 NONAME ; class QVariant NmMessageListModel::data(class QModelIndex const &, int) const
+	?goOnline@NmBaseClientPlugin@@AAEXABVNmId@@@Z @ 256 NONAME ; void NmBaseClientPlugin::goOnline(class NmId const &)
+	?createNewMail@NmBaseClientPlugin@@QAEXXZ @ 257 NONAME ; void NmBaseClientPlugin::createNewMail(void)
+	?qt_metacast@NmBaseClientPlugin@@UAEPAXPBD@Z @ 258 NONAME ; void * NmBaseClientPlugin::qt_metacast(char const *)
+	?staticMetaObject@NmBaseClientPlugin@@2UQMetaObject@@B @ 259 NONAME ; struct QMetaObject const NmBaseClientPlugin::staticMetaObject
+	?searchComplete@NmUiEngine@@IAEXXZ @ 260 NONAME ; void NmUiEngine::searchComplete(void)
+	?setEnvelope@NmMessageListModelItem@@QAEXABVNmMessageEnvelope@@@Z @ 261 NONAME ; void NmMessageListModelItem::setEnvelope(class NmMessageEnvelope const &)
+	?qt_metacast@NmAddAttachmentsOperation@@UAEPAXPBD@Z @ 262 NONAME ; void * NmAddAttachmentsOperation::qt_metacast(char const *)
+	?createNewMailViewerToolBar@NmBaseClientPlugin@@QAEXXZ @ 263 NONAME ; void NmBaseClientPlugin::createNewMailViewerToolBar(void)
+	?staticMetaObject@NmMailboxListModel@@2UQMetaObject@@B @ 264 NONAME ; struct QMetaObject const NmMailboxListModel::staticMetaObject
+	?qt_metacall@NmMessageCreationOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 265 NONAME ; int NmMessageCreationOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@NmDataManager@@SA?AVQString@@PBD0H@Z @ 266 NONAME ; class QString NmDataManager::trUtf8(char const *, char const *, int)
+	?trUtf8@NmMessageCreationOperation@@SA?AVQString@@PBD0H@Z @ 267 NONAME ; class QString NmMessageCreationOperation::trUtf8(char const *, char const *, int)
+	?createForwardMessage@NmUiEngine@@QAE?AV?$QPointer@VNmMessageCreationOperation@@@@ABVNmId@@0@Z @ 268 NONAME ; class QPointer<class NmMessageCreationOperation> NmUiEngine::createForwardMessage(class NmId const &, class NmId const &)
+	?handleSyncStateEvent@NmUiEngine@@QAEXW4NmSyncState@@ABVNmOperationCompletionEvent@@@Z @ 269 NONAME ; void NmUiEngine::handleSyncStateEvent(enum NmSyncState, class NmOperationCompletionEvent const &)
+	?completeOperation@NmOperation@@QAEXH@Z @ 270 NONAME ; void NmOperation::completeOperation(int)
+	?parent@NmFolderListModel@@UBE?AVQModelIndex@@ABV2@@Z @ 271 NONAME ; class QModelIndex NmFolderListModel::parent(class QModelIndex const &) const
+	?folder@NmDataManager@@QAEPAVNmFolder@@ABVNmId@@0@Z @ 272 NONAME ; class NmFolder * NmDataManager::folder(class NmId const &, class NmId const &)
+	??0NmMessageSendingOperation@@QAE@XZ @ 273 NONAME ; NmMessageSendingOperation::NmMessageSendingOperation(void)
+	?replyMail@NmBaseClientPlugin@@QAEXXZ @ 274 NONAME ; void NmBaseClientPlugin::replyMail(void)
+	??1NmMessageListModelItem@@UAE@XZ @ 275 NONAME ; NmMessageListModelItem::~NmMessageListModelItem(void)
+	?mailboxPropertyChanged@NmBaseClientPlugin@@AAEXABVNmId@@VQVariant@@1@Z @ 276 NONAME ; void NmBaseClientPlugin::mailboxPropertyChanged(class NmId const &, class QVariant, class QVariant)
+	?qt_metacall@NmOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 277 NONAME ; int NmOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?removeMessageFromModel@NmMessageListModel@@AAEXABVNmId@@@Z @ 278 NONAME ; void NmMessageListModel::removeMessageFromModel(class NmId const &)
+	?trUtf8@NmMessageListModel@@SA?AVQString@@PBD0H@Z @ 279 NONAME ; class QString NmMessageListModel::trUtf8(char const *, char const *, int)
+	?operationPartCompleted@NmAddAttachmentsOperation@@IAEXABVQString@@ABVNmId@@H@Z @ 280 NONAME ; void NmAddAttachmentsOperation::operationPartCompleted(class QString const &, class NmId const &, int)
+	?trUtf8@NmStoreEnvelopesOperation@@SA?AVQString@@PBD0H@Z @ 281 NONAME ; class QString NmStoreEnvelopesOperation::trUtf8(char const *, char const *, int)
+	?tr@NmMessageListModel@@SA?AVQString@@PBD0@Z @ 282 NONAME ; class QString NmMessageListModel::tr(char const *, char const *)
+	?doCompleteOperation@NmOperation@@MAEXXZ @ 283 NONAME ; void NmOperation::doCompleteOperation(void)
+	?dividerInsertionIndex@NmMessageListModel@@AAEHH@Z @ 284 NONAME ; int NmMessageListModel::dividerInsertionIndex(int)
+	?createMessageItem@NmMessageListModel@@AAEPAVNmMessageListModelItem@@PAVNmMessageEnvelope@@@Z @ 285 NONAME ; class NmMessageListModelItem * NmMessageListModel::createMessageItem(class NmMessageEnvelope *)
+	?id@NmFolderMetaData@@QBE?AVNmId@@XZ @ 286 NONAME ; class NmId NmFolderMetaData::id(void) const
+	?createReplyMessage@NmUiEngine@@QAE?AV?$QPointer@VNmMessageCreationOperation@@@@ABVNmId@@0_N@Z @ 287 NONAME ; class QPointer<class NmMessageCreationOperation> NmUiEngine::createReplyMessage(class NmId const &, class NmId const &, bool)
+	?getStandardFolderId@NmDataManager@@QAE?AVNmId@@ABV2@W4NmFolderType@@@Z @ 288 NONAME ; class NmId NmDataManager::getStandardFolderId(class NmId const &, enum NmFolderType)
+	?address@NmMailboxMetaData@@QBE?AVQString@@XZ @ 289 NONAME ; class QString NmMailboxMetaData::address(void) const
+	?dividersActive@NmMessageListModel@@QAE_NXZ @ 290 NONAME ; bool NmMessageListModel::dividersActive(void)
+	?titleDivider@NmMessageListModelItem@@QBE?AVQString@@XZ @ 291 NONAME ; class QString NmMessageListModelItem::titleDivider(void) const
+	?getStaticMetaObject@NmBaseClientPlugin@@SAABUQMetaObject@@XZ @ 292 NONAME ; struct QMetaObject const & NmBaseClientPlugin::getStaticMetaObject(void)
+	?qt_metacast@NmMessageCreationOperation@@UAEPAXPBD@Z @ 293 NONAME ; void * NmMessageCreationOperation::qt_metacast(char const *)
+	?updateEnvelope@NmMessageListModel@@AAEXW4NmEnvelopeProperties@@ABVNmId@@@Z @ 294 NONAME ; void NmMessageListModel::updateEnvelope(enum NmEnvelopeProperties, class NmId const &)
+	??_ENmDataManager@@UAE@I@Z @ 295 NONAME ; NmDataManager::~NmDataManager(unsigned int)
+	?qt_metacast@NmMailboxListModel@@UAEPAXPBD@Z @ 296 NONAME ; void * NmMailboxListModel::qt_metacast(char const *)
+	?search@NmUiEngine@@QAEHABVNmId@@ABVQStringList@@@Z @ 297 NONAME ; int NmUiEngine::search(class NmId const &, class QStringList const &)
+	?setEnvelopes@NmUiEngine@@QAE?AV?$QPointer@VNmStoreEnvelopesOperation@@@@ABVNmId@@0W4NmEnvelopeProperties@@ABV?$QList@PB$$CBVNmMessageEnvelope@@@@@Z @ 298 NONAME ; class QPointer<class NmStoreEnvelopesOperation> NmUiEngine::setEnvelopes(class NmId const &, class NmId const &, enum NmEnvelopeProperties, class QList<class NmMessageEnvelope const *> const &)
+	?getActions@NmBaseClientPlugin@@UAEXABVNmActionRequest@@AAV?$QList@PAVNmAction@@@@@Z @ 299 NONAME ; void NmBaseClientPlugin::getActions(class NmActionRequest const &, class QList<class NmAction *> &)
+	?qt_metacast@NmStoreEnvelopesOperation@@UAEPAXPBD@Z @ 300 NONAME ; void * NmStoreEnvelopesOperation::qt_metacast(char const *)
+	??_ENmMailboxMetaData@@UAE@I@Z @ 301 NONAME ; NmMailboxMetaData::~NmMailboxMetaData(unsigned int)
+	??0NmMessageListModelItem@@QAE@XZ @ 302 NONAME ; NmMessageListModelItem::NmMessageListModelItem(void)
+	?tr@NmAddAttachmentsOperation@@SA?AVQString@@PBD0H@Z @ 303 NONAME ; class QString NmAddAttachmentsOperation::tr(char const *, char const *, int)
+	?setDividers@NmMessageListModel@@QAEX_N@Z @ 304 NONAME ; void NmMessageListModel::setDividers(bool)
+	?loadPlugin@NmDataPluginFactory@@QAEPAVQObject@@ABVQDir@@ABVQString@@@Z @ 305 NONAME ; class QObject * NmDataPluginFactory::loadPlugin(class QDir const &, class QString const &)
+	?qt_metacast@NmOperation@@UAEPAXPBD@Z @ 306 NONAME ; void * NmOperation::qt_metacast(char const *)
+	?tr@NmMessageListModel@@SA?AVQString@@PBD0H@Z @ 307 NONAME ; class QString NmMessageListModel::tr(char const *, char const *, int)
+	?removeAttachment@NmUiEngine@@QAE?AV?$QPointer@VNmOperation@@@@ABVNmMessage@@ABVNmId@@@Z @ 308 NONAME ; class QPointer<class NmOperation> NmUiEngine::removeAttachment(class NmMessage const &, class NmId const &)
+	?staticMetaObject@NmMessageListModel@@2UQMetaObject@@B @ 309 NONAME ; struct QMetaObject const NmMessageListModel::staticMetaObject
+	?qt_metacall@NmAddAttachmentsOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 310 NONAME ; int NmAddAttachmentsOperation::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@NmUiEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 311 NONAME ; int NmUiEngine::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?message@NmDataManager@@QAEPAVNmMessage@@ABVNmId@@00@Z @ 312 NONAME ; class NmMessage * NmDataManager::message(class NmId const &, class NmId const &, class NmId const &)
+	?metaObject@NmOperation@@UBEPBUQMetaObject@@XZ @ 313 NONAME ; struct QMetaObject const * NmOperation::metaObject(void) const
 
--- a/emailuis/nmailuiengine/eabi/nmailuiengineu.def	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiengine/eabi/nmailuiengineu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -43,279 +43,280 @@
 	_ZN10NmUiEngine20contentToMessagePartERK4NmIdS2_S2_R13NmMessagePart @ 42 NONAME
 	_ZN10NmUiEngine20createForwardMessageERK4NmIdS2_ @ 43 NONAME
 	_ZN10NmUiEngine20handleSyncStateEventE11NmSyncStateRK26NmOperationCompletionEvent @ 44 NONAME
-	_ZN10NmUiEngine22sendOperationCompletedEv @ 45 NONAME
-	_ZN10NmUiEngine23refreshMailboxListModelEv @ 46 NONAME
-	_ZN10NmUiEngine25messageListModelForSearchERK4NmId @ 47 NONAME
-	_ZN10NmUiEngine28handleCompletedSendOperationEv @ 48 NONAME
-	_ZN10NmUiEngine33handleCompletedSaveDraftOperationEv @ 49 NONAME
-	_ZN10NmUiEngine35handleCompletedRemoveDraftOperationEv @ 50 NONAME
-	_ZN10NmUiEngine6searchERK4NmIdRK11QStringList @ 51 NONAME
-	_ZN10NmUiEngine7messageERK4NmIdS2_S2_ @ 52 NONAME
-	_ZN10NmUiEngine8goOnlineERK4NmId @ 53 NONAME
-	_ZN10NmUiEngine8instanceEv @ 54 NONAME
-	_ZN10NmUiEngine9goOfflineERK4NmId @ 55 NONAME
-	_ZN10NmUiEngine9mInstanceE @ 56 NONAME DATA 4
-	_ZN10NmUiEngine9syncStateERK4NmId @ 57 NONAME
-	_ZN10NmUiEngineC1Ev @ 58 NONAME
-	_ZN10NmUiEngineC2Ev @ 59 NONAME
-	_ZN10NmUiEngineD0Ev @ 60 NONAME
-	_ZN10NmUiEngineD1Ev @ 61 NONAME
-	_ZN10NmUiEngineD2Ev @ 62 NONAME
-	_ZN11NmOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 63 NONAME
-	_ZN11NmOperation11qt_metacastEPKc @ 64 NONAME
-	_ZN11NmOperation15cancelOperationEv @ 65 NONAME
-	_ZN11NmOperation15deleteOperationEv @ 66 NONAME
-	_ZN11NmOperation16staticMetaObjectE @ 67 NONAME DATA 16
-	_ZN11NmOperation17completeOperationEi @ 68 NONAME
-	_ZN11NmOperation17doCancelOperationEv @ 69 NONAME
-	_ZN11NmOperation17runAsyncOperationEv @ 70 NONAME
-	_ZN11NmOperation18operationCancelledEv @ 71 NONAME
-	_ZN11NmOperation18operationCompletedEi @ 72 NONAME
-	_ZN11NmOperation19doCompleteOperationEv @ 73 NONAME
-	_ZN11NmOperation19getStaticMetaObjectEv @ 74 NONAME
-	_ZN11NmOperation23addPreliminaryOperationEPS_ @ 75 NONAME
-	_ZN11NmOperation23updateOperationProgressEi @ 76 NONAME
-	_ZN11NmOperation24operationProgressChangedEi @ 77 NONAME
-	_ZN11NmOperation25doUpdateOperationProgressEv @ 78 NONAME
-	_ZN11NmOperation34handlePreliminaryOperationFinishedEv @ 79 NONAME
-	_ZN11NmOperationC2Ev @ 80 NONAME
-	_ZN11NmOperationD0Ev @ 81 NONAME
-	_ZN11NmOperationD1Ev @ 82 NONAME
-	_ZN11NmOperationD2Ev @ 83 NONAME
-	_ZN13NmDataManager10folderByIdERK4NmIdS2_ @ 84 NONAME
-	_ZN13NmDataManager11listFoldersE4NmIdR5QListIP8NmFolderE @ 85 NONAME
-	_ZN13NmDataManager11mailboxByIdERK4NmId @ 86 NONAME
-	_ZN13NmDataManager11qt_metacallEN11QMetaObject4CallEiPPv @ 87 NONAME
-	_ZN13NmDataManager11qt_metacastEPKc @ 88 NONAME
-	_ZN13NmDataManager12envelopeByIdERK4NmIdS2_S2_ @ 89 NONAME
-	_ZN13NmDataManager12listMessagesERK4NmIdS2_R5QListIP17NmMessageEnvelopeE @ 90 NONAME
-	_ZN13NmDataManager13listMailboxesER5QListIP9NmMailboxE @ 91 NONAME
-	_ZN13NmDataManager14folderTypeByIdE4NmIdS0_ @ 92 NONAME
-	_ZN13NmDataManager14listMailboxIdsER5QListI4NmIdE @ 93 NONAME
-	_ZN13NmDataManager16staticMetaObjectE @ 94 NONAME DATA 16
-	_ZN13NmDataManager19getStandardFolderIdERK4NmId12NmFolderType @ 95 NONAME
-	_ZN13NmDataManager19getStaticMetaObjectEv @ 96 NONAME
-	_ZN13NmDataManager20contentToMessagePartERK4NmIdS2_S2_R13NmMessagePart @ 97 NONAME
-	_ZN13NmDataManager6folderERK4NmIdS2_ @ 98 NONAME
-	_ZN13NmDataManager7mailboxERK4NmId @ 99 NONAME
-	_ZN13NmDataManager7messageERK4NmIdS2_S2_ @ 100 NONAME
-	_ZN13NmDataManagerC1Ev @ 101 NONAME
-	_ZN13NmDataManagerC2Ev @ 102 NONAME
-	_ZN13NmDataManagerD0Ev @ 103 NONAME
-	_ZN13NmDataManagerD1Ev @ 104 NONAME
-	_ZN13NmDataManagerD2Ev @ 105 NONAME
-	_ZN16NmFolderMetaData5setIdERK4NmId @ 106 NONAME
-	_ZN16NmFolderMetaData7setNameERK7QString @ 107 NONAME
-	_ZN16NmFolderMetaDataC1Ev @ 108 NONAME
-	_ZN16NmFolderMetaDataC2Ev @ 109 NONAME
-	_ZN16NmFolderMetaDataD0Ev @ 110 NONAME
-	_ZN16NmFolderMetaDataD1Ev @ 111 NONAME
-	_ZN16NmFolderMetaDataD2Ev @ 112 NONAME
-	_ZN17NmFolderListModel7refreshER5QListIP8NmFolderE @ 113 NONAME
-	_ZN17NmFolderListModelC1ER13NmDataManagerP7QObject @ 114 NONAME
-	_ZN17NmFolderListModelC2ER13NmDataManagerP7QObject @ 115 NONAME
-	_ZN17NmFolderListModelD0Ev @ 116 NONAME
-	_ZN17NmFolderListModelD1Ev @ 117 NONAME
-	_ZN17NmFolderListModelD2Ev @ 118 NONAME
-	_ZN17NmMailboxMetaData10setAddressERK7QString @ 119 NONAME
-	_ZN17NmMailboxMetaData5setIdERK4NmId @ 120 NONAME
-	_ZN17NmMailboxMetaData7setNameERK7QString @ 121 NONAME
-	_ZN17NmMailboxMetaData9setIconIdERK4NmId @ 122 NONAME
-	_ZN17NmMailboxMetaDataC1Ev @ 123 NONAME
-	_ZN17NmMailboxMetaDataC2Ev @ 124 NONAME
-	_ZN17NmMailboxMetaDataD0Ev @ 125 NONAME
-	_ZN17NmMailboxMetaDataD1Ev @ 126 NONAME
-	_ZN17NmMailboxMetaDataD2Ev @ 127 NONAME
-	_ZN18NmBaseClientPlugin10getActionsERK15NmActionRequestR5QListIP8NmActionE @ 128 NONAME
-	_ZN18NmBaseClientPlugin10markAsReadEv @ 129 NONAME
-	_ZN18NmBaseClientPlugin11forwardMailEv @ 130 NONAME
-	_ZN18NmBaseClientPlugin11openMessageEv @ 131 NONAME
-	_ZN18NmBaseClientPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 132 NONAME
-	_ZN18NmBaseClientPlugin11qt_metacastEPKc @ 133 NONAME
-	_ZN18NmBaseClientPlugin12markAsUnreadEv @ 134 NONAME
-	_ZN18NmBaseClientPlugin12replyAllMailEv @ 135 NONAME
-	_ZN18NmBaseClientPlugin13createNewMailEv @ 136 NONAME
-	_ZN18NmBaseClientPlugin13deleteMessageEv @ 137 NONAME
-	_ZN18NmBaseClientPlugin13handleRequestE23NmActionResponseCommandRK15NmActionRequest @ 138 NONAME
-	_ZN18NmBaseClientPlugin14openAttachmentEv @ 139 NONAME
-	_ZN18NmBaseClientPlugin14setPriorityLowEv @ 140 NONAME
-	_ZN18NmBaseClientPlugin15setPriorityHighEv @ 141 NONAME
-	_ZN18NmBaseClientPlugin16removeAttachmentEv @ 142 NONAME
-	_ZN18NmBaseClientPlugin16staticMetaObjectE @ 143 NONAME DATA 16
-	_ZN18NmBaseClientPlugin17setPriorityNormalEv @ 144 NONAME
-	_ZN18NmBaseClientPlugin18mailboxListChangedERK4NmIdN10NmSettings16MailboxEventTypeE @ 145 NONAME
-	_ZN18NmBaseClientPlugin19getStaticMetaObjectEv @ 146 NONAME
-	_ZN18NmBaseClientPlugin22mailboxPropertyChangedERK4NmId8QVariantS3_ @ 147 NONAME
-	_ZN18NmBaseClientPlugin22updateEnvelopePropertyE20NmEnvelopeProperties @ 148 NONAME
-	_ZN18NmBaseClientPlugin24createEditorViewCommandsERK15NmActionRequestR5QListIP8NmActionE @ 149 NONAME
-	_ZN18NmBaseClientPlugin24createViewerViewCommandsERK15NmActionRequestR5QListIP8NmActionE @ 150 NONAME
-	_ZN18NmBaseClientPlugin25createMessageListCommandsERK15NmActionRequestR5QListIP8NmActionE @ 151 NONAME
-	_ZN18NmBaseClientPlugin26createNewMailViewerToolBarEv @ 152 NONAME
-	_ZN18NmBaseClientPlugin27deleteMessageFromViewerViewEv @ 153 NONAME
-	_ZN18NmBaseClientPlugin6attachEv @ 154 NONAME
-	_ZN18NmBaseClientPlugin6searchEv @ 155 NONAME
-	_ZN18NmBaseClientPlugin7refreshEv @ 156 NONAME
-	_ZN18NmBaseClientPlugin8goOnlineERK4NmId @ 157 NONAME
-	_ZN18NmBaseClientPlugin8sendMailEv @ 158 NONAME
-	_ZN18NmBaseClientPlugin8settingsEv @ 159 NONAME
-	_ZN18NmBaseClientPlugin9goOfflineERK4NmId @ 160 NONAME
-	_ZN18NmBaseClientPlugin9replyMailEv @ 161 NONAME
-	_ZN18NmBaseClientPluginC2Ev @ 162 NONAME
-	_ZN18NmBaseClientPluginD0Ev @ 163 NONAME
-	_ZN18NmBaseClientPluginD1Ev @ 164 NONAME
-	_ZN18NmBaseClientPluginD2Ev @ 165 NONAME
-	_ZN18NmMailboxListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 166 NONAME
-	_ZN18NmMailboxListModel11qt_metacastEPKc @ 167 NONAME
-	_ZN18NmMailboxListModel16refreshModelItemERK4NmId @ 168 NONAME
-	_ZN18NmMailboxListModel16staticMetaObjectE @ 169 NONAME DATA 16
-	_ZN18NmMailboxListModel17createMailboxItemEPK9NmMailbox @ 170 NONAME
-	_ZN18NmMailboxListModel18handleMailboxEventE14NmMailboxEventRK5QListI4NmIdE @ 171 NONAME
-	_ZN18NmMailboxListModel19getStaticMetaObjectEv @ 172 NONAME
-	_ZN18NmMailboxListModel7refreshER5QListIP9NmMailboxE @ 173 NONAME
-	_ZN18NmMailboxListModelC1ER13NmDataManagerP7QObject @ 174 NONAME
-	_ZN18NmMailboxListModelC2ER13NmDataManagerP7QObject @ 175 NONAME
-	_ZN18NmMailboxListModelD0Ev @ 176 NONAME
-	_ZN18NmMailboxListModelD1Ev @ 177 NONAME
-	_ZN18NmMailboxListModelD2Ev @ 178 NONAME
-	_ZN18NmMessageListModel10removeItemEiR22NmMessageListModelItem @ 179 NONAME
-	_ZN18NmMessageListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 180 NONAME
-	_ZN18NmMessageListModel11qt_metacastEPKc @ 181 NONAME
-	_ZN18NmMessageListModel11setDividersEb @ 182 NONAME
-	_ZN18NmMessageListModel11setNewParamEP14NmUiStartParam @ 183 NONAME
-	_ZN18NmMessageListModel13itemFromModelERK4NmId @ 184 NONAME
-	_ZN18NmMessageListModel14dividersActiveEv @ 185 NONAME
-	_ZN18NmMessageListModel14updateEnvelopeE20NmEnvelopePropertiesRK4NmId @ 186 NONAME
-	_ZN18NmMessageListModel16currentMailboxIdEv @ 187 NONAME
-	_ZN18NmMessageListModel16staticMetaObjectE @ 188 NONAME DATA 16
-	_ZN18NmMessageListModel17createMessageItemEP17NmMessageEnvelope @ 189 NONAME
-	_ZN18NmMessageListModel18handleMessageEventE14NmMessageEventRK4NmIdRK5QListIS1_ES3_ @ 190 NONAME
-	_ZN18NmMessageListModel18setIgnoreFolderIdsEb @ 191 NONAME
-	_ZN18NmMessageListModel19getStaticMetaObjectEv @ 192 NONAME
-	_ZN18NmMessageListModel21dividerInsertionIndexEi @ 193 NONAME
-	_ZN18NmMessageListModel21setEnvelopePropertiesE20NmEnvelopePropertiesRK5QListI4NmIdE @ 194 NONAME
-	_ZN18NmMessageListModel21updateMessageEnvelopeERK4NmIdS2_S2_ @ 195 NONAME
-	_ZN18NmMessageListModel22createTitleDividerItemEP17NmMessageEnvelope @ 196 NONAME
-	_ZN18NmMessageListModel22insertDividerIntoModelEP17NmMessageEnvelopei @ 197 NONAME
-	_ZN18NmMessageListModel22insertMessageIntoModelEP17NmMessageEnvelopeib @ 198 NONAME
-	_ZN18NmMessageListModel22removeMessageFromModelERK4NmId @ 199 NONAME
-	_ZN18NmMessageListModel25insertNewMessageIntoModelERK4NmIdS2_S2_ @ 200 NONAME
-	_ZN18NmMessageListModel7changedERK17NmMessageEnvelopeS2_ @ 201 NONAME
-	_ZN18NmMessageListModel7refreshE4NmIdS0_RK5QListIP17NmMessageEnvelopeE @ 202 NONAME
-	_ZN18NmMessageListModelC1ER13NmDataManagerP7QObject @ 203 NONAME
-	_ZN18NmMessageListModelC2ER13NmDataManagerP7QObject @ 204 NONAME
-	_ZN18NmMessageListModelD0Ev @ 205 NONAME
-	_ZN18NmMessageListModelD1Ev @ 206 NONAME
-	_ZN18NmMessageListModelD2Ev @ 207 NONAME
-	_ZN19NmDataPluginFactory10loadPluginERK4QDirRK7QString @ 208 NONAME
-	_ZN19NmDataPluginFactory12mPluginArrayE @ 209 NONAME DATA 4
-	_ZN19NmDataPluginFactory14pluginInstanceE4NmId @ 210 NONAME
-	_ZN19NmDataPluginFactory15mReferenceCountE @ 211 NONAME DATA 4
-	_ZN19NmDataPluginFactory15pluginInstancesEv @ 212 NONAME
-	_ZN19NmDataPluginFactory15releaseInstanceERPS_ @ 213 NONAME
-	_ZN19NmDataPluginFactory17interfaceInstanceE4NmId @ 214 NONAME
-	_ZN19NmDataPluginFactory17interfaceInstanceEP7QObject @ 215 NONAME
-	_ZN19NmDataPluginFactory18mPluginLoaderArrayE @ 216 NONAME DATA 4
-	_ZN19NmDataPluginFactory33applicationStateInterfaceInstanceE4NmId @ 217 NONAME
-	_ZN19NmDataPluginFactory33applicationStateInterfaceInstanceEP7QObject @ 218 NONAME
-	_ZN19NmDataPluginFactory8instanceEv @ 219 NONAME
-	_ZN19NmDataPluginFactory9mInstanceE @ 220 NONAME DATA 4
-	_ZN19NmDataPluginFactoryC1Ev @ 221 NONAME
-	_ZN19NmDataPluginFactoryC2Ev @ 222 NONAME
-	_ZN19NmDataPluginFactoryD0Ev @ 223 NONAME
-	_ZN19NmDataPluginFactoryD1Ev @ 224 NONAME
-	_ZN19NmDataPluginFactoryD2Ev @ 225 NONAME
-	_ZN22NmMessageListModelItem11envelopePtrEv @ 226 NONAME
-	_ZN22NmMessageListModelItem11setEnvelopeEP17NmMessageEnvelope @ 227 NONAME
-	_ZN22NmMessageListModelItem11setEnvelopeERK17NmMessageEnvelope @ 228 NONAME
-	_ZN22NmMessageListModelItem11setExpandedEb @ 229 NONAME
-	_ZN22NmMessageListModelItem11setItemTypeENS_17NmMessageItemTypeE @ 230 NONAME
-	_ZN22NmMessageListModelItem15setTitleDividerERK7QString @ 231 NONAME
-	_ZN22NmMessageListModelItem19callEmitDataChangedEv @ 232 NONAME
-	_ZN22NmMessageListModelItemC1Ev @ 233 NONAME
-	_ZN22NmMessageListModelItemC2Ev @ 234 NONAME
-	_ZN22NmMessageListModelItemD0Ev @ 235 NONAME
-	_ZN22NmMessageListModelItemD1Ev @ 236 NONAME
-	_ZN22NmMessageListModelItemD2Ev @ 237 NONAME
-	_ZN25NmAddAttachmentsOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 238 NONAME
-	_ZN25NmAddAttachmentsOperation11qt_metacastEPKc @ 239 NONAME
-	_ZN25NmAddAttachmentsOperation16staticMetaObjectE @ 240 NONAME DATA 16
-	_ZN25NmAddAttachmentsOperation19getStaticMetaObjectEv @ 241 NONAME
-	_ZN25NmAddAttachmentsOperation21completeOperationPartERK7QStringRK4NmIdi @ 242 NONAME
-	_ZN25NmAddAttachmentsOperation22operationPartCompletedERK7QStringRK4NmIdi @ 243 NONAME
-	_ZN25NmAddAttachmentsOperationC2Ev @ 244 NONAME
-	_ZN25NmAddAttachmentsOperationD0Ev @ 245 NONAME
-	_ZN25NmAddAttachmentsOperationD1Ev @ 246 NONAME
-	_ZN25NmAddAttachmentsOperationD2Ev @ 247 NONAME
-	_ZN25NmStoreEnvelopesOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 248 NONAME
-	_ZN25NmStoreEnvelopesOperation11qt_metacastEPKc @ 249 NONAME
-	_ZN25NmStoreEnvelopesOperation16staticMetaObjectE @ 250 NONAME DATA 16
-	_ZN25NmStoreEnvelopesOperation19getStaticMetaObjectEv @ 251 NONAME
-	_ZN26NmMessageCreationOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 252 NONAME
-	_ZN26NmMessageCreationOperation11qt_metacastEPKc @ 253 NONAME
-	_ZN26NmMessageCreationOperation16staticMetaObjectE @ 254 NONAME DATA 16
-	_ZN26NmMessageCreationOperation19getStaticMetaObjectEv @ 255 NONAME
-	_ZN7NmIcons7getIconENS_4IconE @ 256 NONAME
-	_ZN7NmIcons9freeIconsEv @ 257 NONAME
-	_ZNK10NmUiEngine10metaObjectEv @ 258 NONAME
-	_ZNK10NmUiEngine16isSendingMessageEv @ 259 NONAME
-	_ZNK10NmUiEngine16messageBeingSentEv @ 260 NONAME
-	_ZNK11NmOperation10metaObjectEv @ 261 NONAME
-	_ZNK11NmOperation9isRunningEv @ 262 NONAME
-	_ZNK13NmDataManager10metaObjectEv @ 263 NONAME
-	_ZNK16NmFolderMetaData2idEv @ 264 NONAME
-	_ZNK16NmFolderMetaData4nameEv @ 265 NONAME
-	_ZNK17NmFolderListModel11columnCountERK11QModelIndex @ 266 NONAME
-	_ZNK17NmFolderListModel4dataERK11QModelIndexi @ 267 NONAME
-	_ZNK17NmFolderListModel6parentERK11QModelIndex @ 268 NONAME
-	_ZNK17NmFolderListModel8rowCountERK11QModelIndex @ 269 NONAME
-	_ZNK17NmMailboxMetaData2idEv @ 270 NONAME
-	_ZNK17NmMailboxMetaData4nameEv @ 271 NONAME
-	_ZNK17NmMailboxMetaData6IconIdEv @ 272 NONAME
-	_ZNK17NmMailboxMetaData7addressEv @ 273 NONAME
-	_ZNK18NmBaseClientPlugin10metaObjectEv @ 274 NONAME
-	_ZNK18NmMailboxListModel10metaObjectEv @ 275 NONAME
-	_ZNK18NmMailboxListModel4dataERK11QModelIndexi @ 276 NONAME
-	_ZNK18NmMessageListModel10metaObjectEv @ 277 NONAME
-	_ZNK18NmMessageListModel17getInsertionIndexERK17NmMessageEnvelope @ 278 NONAME
-	_ZNK18NmMessageListModel30messagesBelongUnderSameDividerEPK17NmMessageEnvelopeS2_ @ 279 NONAME
-	_ZNK18NmMessageListModel4dataERK11QModelIndexi @ 280 NONAME
-	_ZNK22NmMessageListModelItem12titleDividerEv @ 281 NONAME
-	_ZNK22NmMessageListModelItem8envelopeEv @ 282 NONAME
-	_ZNK22NmMessageListModelItem8expandedEv @ 283 NONAME
-	_ZNK22NmMessageListModelItem8itemTypeEv @ 284 NONAME
-	_ZNK25NmAddAttachmentsOperation10metaObjectEv @ 285 NONAME
-	_ZNK25NmStoreEnvelopesOperation10metaObjectEv @ 286 NONAME
-	_ZNK26NmMessageCreationOperation10metaObjectEv @ 287 NONAME
-	_ZTI10NmUiEngine @ 288 NONAME
-	_ZTI11NmOperation @ 289 NONAME
-	_ZTI13NmDataManager @ 290 NONAME
-	_ZTI16NmFolderMetaData @ 291 NONAME
-	_ZTI17NmFolderListModel @ 292 NONAME
-	_ZTI17NmMailboxMetaData @ 293 NONAME
-	_ZTI18NmBaseClientPlugin @ 294 NONAME
-	_ZTI18NmMailboxListModel @ 295 NONAME
-	_ZTI18NmMessageListModel @ 296 NONAME
-	_ZTI19NmDataPluginFactory @ 297 NONAME
-	_ZTI22NmMessageListModelItem @ 298 NONAME
-	_ZTI25NmAddAttachmentsOperation @ 299 NONAME
-	_ZTI25NmStoreEnvelopesOperation @ 300 NONAME
-	_ZTI26NmMessageCreationOperation @ 301 NONAME
-	_ZTV10NmUiEngine @ 302 NONAME
-	_ZTV11NmOperation @ 303 NONAME
-	_ZTV13NmDataManager @ 304 NONAME
-	_ZTV16NmFolderMetaData @ 305 NONAME
-	_ZTV17NmFolderListModel @ 306 NONAME
-	_ZTV17NmMailboxMetaData @ 307 NONAME
-	_ZTV18NmBaseClientPlugin @ 308 NONAME
-	_ZTV18NmMailboxListModel @ 309 NONAME
-	_ZTV18NmMessageListModel @ 310 NONAME
-	_ZTV19NmDataPluginFactory @ 311 NONAME
-	_ZTV22NmMessageListModelItem @ 312 NONAME
-	_ZTV25NmAddAttachmentsOperation @ 313 NONAME
-	_ZTV25NmStoreEnvelopesOperation @ 314 NONAME
-	_ZTV26NmMessageCreationOperation @ 315 NONAME
-	_ZThn8_N18NmBaseClientPlugin10getActionsERK15NmActionRequestR5QListIP8NmActionE @ 316 NONAME
-	_ZThn8_N18NmBaseClientPluginD0Ev @ 317 NONAME
-	_ZThn8_N18NmBaseClientPluginD1Ev @ 318 NONAME
-	_ZN10NmUiEngine24messageEventForListModelE14NmMessageEventRK4NmIdRK5QListIS1_ES3_ @ 319 NONAME
+	_ZN10NmUiEngine22getPluginIdByMailboxIdEj @ 45 NONAME
+	_ZN10NmUiEngine22sendOperationCompletedEv @ 46 NONAME
+	_ZN10NmUiEngine23refreshMailboxListModelEv @ 47 NONAME
+	_ZN10NmUiEngine24messageEventForListModelE14NmMessageEventRK4NmIdRK5QListIS1_ES3_ @ 48 NONAME
+	_ZN10NmUiEngine25messageListModelForSearchERK4NmId @ 49 NONAME
+	_ZN10NmUiEngine28handleCompletedSendOperationEv @ 50 NONAME
+	_ZN10NmUiEngine33handleCompletedSaveDraftOperationEv @ 51 NONAME
+	_ZN10NmUiEngine35handleCompletedRemoveDraftOperationEv @ 52 NONAME
+	_ZN10NmUiEngine6searchERK4NmIdRK11QStringList @ 53 NONAME
+	_ZN10NmUiEngine7messageERK4NmIdS2_S2_ @ 54 NONAME
+	_ZN10NmUiEngine8goOnlineERK4NmId @ 55 NONAME
+	_ZN10NmUiEngine8instanceEv @ 56 NONAME
+	_ZN10NmUiEngine9goOfflineERK4NmId @ 57 NONAME
+	_ZN10NmUiEngine9mInstanceE @ 58 NONAME DATA 4
+	_ZN10NmUiEngine9syncStateERK4NmId @ 59 NONAME
+	_ZN10NmUiEngineC1Ev @ 60 NONAME
+	_ZN10NmUiEngineC2Ev @ 61 NONAME
+	_ZN10NmUiEngineD0Ev @ 62 NONAME
+	_ZN10NmUiEngineD1Ev @ 63 NONAME
+	_ZN10NmUiEngineD2Ev @ 64 NONAME
+	_ZN11NmOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 65 NONAME
+	_ZN11NmOperation11qt_metacastEPKc @ 66 NONAME
+	_ZN11NmOperation15cancelOperationEv @ 67 NONAME
+	_ZN11NmOperation15deleteOperationEv @ 68 NONAME
+	_ZN11NmOperation16staticMetaObjectE @ 69 NONAME DATA 16
+	_ZN11NmOperation17completeOperationEi @ 70 NONAME
+	_ZN11NmOperation17doCancelOperationEv @ 71 NONAME
+	_ZN11NmOperation17runAsyncOperationEv @ 72 NONAME
+	_ZN11NmOperation18operationCancelledEv @ 73 NONAME
+	_ZN11NmOperation18operationCompletedEi @ 74 NONAME
+	_ZN11NmOperation19doCompleteOperationEv @ 75 NONAME
+	_ZN11NmOperation19getStaticMetaObjectEv @ 76 NONAME
+	_ZN11NmOperation23addPreliminaryOperationEPS_ @ 77 NONAME
+	_ZN11NmOperation23updateOperationProgressEi @ 78 NONAME
+	_ZN11NmOperation24operationProgressChangedEi @ 79 NONAME
+	_ZN11NmOperation25doUpdateOperationProgressEv @ 80 NONAME
+	_ZN11NmOperation34handlePreliminaryOperationFinishedEv @ 81 NONAME
+	_ZN11NmOperationC2Ev @ 82 NONAME
+	_ZN11NmOperationD0Ev @ 83 NONAME
+	_ZN11NmOperationD1Ev @ 84 NONAME
+	_ZN11NmOperationD2Ev @ 85 NONAME
+	_ZN13NmDataManager10folderByIdERK4NmIdS2_ @ 86 NONAME
+	_ZN13NmDataManager11listFoldersE4NmIdR5QListIP8NmFolderE @ 87 NONAME
+	_ZN13NmDataManager11mailboxByIdERK4NmId @ 88 NONAME
+	_ZN13NmDataManager11qt_metacallEN11QMetaObject4CallEiPPv @ 89 NONAME
+	_ZN13NmDataManager11qt_metacastEPKc @ 90 NONAME
+	_ZN13NmDataManager12envelopeByIdERK4NmIdS2_S2_ @ 91 NONAME
+	_ZN13NmDataManager12listMessagesERK4NmIdS2_R5QListIP17NmMessageEnvelopeE @ 92 NONAME
+	_ZN13NmDataManager13listMailboxesER5QListIP9NmMailboxE @ 93 NONAME
+	_ZN13NmDataManager14folderTypeByIdE4NmIdS0_ @ 94 NONAME
+	_ZN13NmDataManager14listMailboxIdsER5QListI4NmIdE @ 95 NONAME
+	_ZN13NmDataManager16staticMetaObjectE @ 96 NONAME DATA 16
+	_ZN13NmDataManager19getStandardFolderIdERK4NmId12NmFolderType @ 97 NONAME
+	_ZN13NmDataManager19getStaticMetaObjectEv @ 98 NONAME
+	_ZN13NmDataManager20contentToMessagePartERK4NmIdS2_S2_R13NmMessagePart @ 99 NONAME
+	_ZN13NmDataManager6folderERK4NmIdS2_ @ 100 NONAME
+	_ZN13NmDataManager7mailboxERK4NmId @ 101 NONAME
+	_ZN13NmDataManager7messageERK4NmIdS2_S2_ @ 102 NONAME
+	_ZN13NmDataManagerC1Ev @ 103 NONAME
+	_ZN13NmDataManagerC2Ev @ 104 NONAME
+	_ZN13NmDataManagerD0Ev @ 105 NONAME
+	_ZN13NmDataManagerD1Ev @ 106 NONAME
+	_ZN13NmDataManagerD2Ev @ 107 NONAME
+	_ZN16NmFolderMetaData5setIdERK4NmId @ 108 NONAME
+	_ZN16NmFolderMetaData7setNameERK7QString @ 109 NONAME
+	_ZN16NmFolderMetaDataC1Ev @ 110 NONAME
+	_ZN16NmFolderMetaDataC2Ev @ 111 NONAME
+	_ZN16NmFolderMetaDataD0Ev @ 112 NONAME
+	_ZN16NmFolderMetaDataD1Ev @ 113 NONAME
+	_ZN16NmFolderMetaDataD2Ev @ 114 NONAME
+	_ZN17NmFolderListModel7refreshER5QListIP8NmFolderE @ 115 NONAME
+	_ZN17NmFolderListModelC1ER13NmDataManagerP7QObject @ 116 NONAME
+	_ZN17NmFolderListModelC2ER13NmDataManagerP7QObject @ 117 NONAME
+	_ZN17NmFolderListModelD0Ev @ 118 NONAME
+	_ZN17NmFolderListModelD1Ev @ 119 NONAME
+	_ZN17NmFolderListModelD2Ev @ 120 NONAME
+	_ZN17NmMailboxMetaData10setAddressERK7QString @ 121 NONAME
+	_ZN17NmMailboxMetaData5setIdERK4NmId @ 122 NONAME
+	_ZN17NmMailboxMetaData7setNameERK7QString @ 123 NONAME
+	_ZN17NmMailboxMetaData9setIconIdERK4NmId @ 124 NONAME
+	_ZN17NmMailboxMetaDataC1Ev @ 125 NONAME
+	_ZN17NmMailboxMetaDataC2Ev @ 126 NONAME
+	_ZN17NmMailboxMetaDataD0Ev @ 127 NONAME
+	_ZN17NmMailboxMetaDataD1Ev @ 128 NONAME
+	_ZN17NmMailboxMetaDataD2Ev @ 129 NONAME
+	_ZN18NmBaseClientPlugin10getActionsERK15NmActionRequestR5QListIP8NmActionE @ 130 NONAME
+	_ZN18NmBaseClientPlugin10markAsReadEv @ 131 NONAME
+	_ZN18NmBaseClientPlugin11forwardMailEv @ 132 NONAME
+	_ZN18NmBaseClientPlugin11openMessageEv @ 133 NONAME
+	_ZN18NmBaseClientPlugin11qt_metacallEN11QMetaObject4CallEiPPv @ 134 NONAME
+	_ZN18NmBaseClientPlugin11qt_metacastEPKc @ 135 NONAME
+	_ZN18NmBaseClientPlugin12markAsUnreadEv @ 136 NONAME
+	_ZN18NmBaseClientPlugin12replyAllMailEv @ 137 NONAME
+	_ZN18NmBaseClientPlugin13createNewMailEv @ 138 NONAME
+	_ZN18NmBaseClientPlugin13deleteMessageEv @ 139 NONAME
+	_ZN18NmBaseClientPlugin13handleRequestE23NmActionResponseCommandRK15NmActionRequest @ 140 NONAME
+	_ZN18NmBaseClientPlugin14openAttachmentEv @ 141 NONAME
+	_ZN18NmBaseClientPlugin14setPriorityLowEv @ 142 NONAME
+	_ZN18NmBaseClientPlugin15setPriorityHighEv @ 143 NONAME
+	_ZN18NmBaseClientPlugin16removeAttachmentEv @ 144 NONAME
+	_ZN18NmBaseClientPlugin16staticMetaObjectE @ 145 NONAME DATA 16
+	_ZN18NmBaseClientPlugin17setPriorityNormalEv @ 146 NONAME
+	_ZN18NmBaseClientPlugin18mailboxListChangedERK4NmIdN10NmSettings16MailboxEventTypeE @ 147 NONAME
+	_ZN18NmBaseClientPlugin19getStaticMetaObjectEv @ 148 NONAME
+	_ZN18NmBaseClientPlugin22mailboxPropertyChangedERK4NmId8QVariantS3_ @ 149 NONAME
+	_ZN18NmBaseClientPlugin22updateEnvelopePropertyE20NmEnvelopeProperties @ 150 NONAME
+	_ZN18NmBaseClientPlugin24createEditorViewCommandsERK15NmActionRequestR5QListIP8NmActionE @ 151 NONAME
+	_ZN18NmBaseClientPlugin24createViewerViewCommandsERK15NmActionRequestR5QListIP8NmActionE @ 152 NONAME
+	_ZN18NmBaseClientPlugin25createMessageListCommandsERK15NmActionRequestR5QListIP8NmActionE @ 153 NONAME
+	_ZN18NmBaseClientPlugin26createNewMailViewerToolBarEv @ 154 NONAME
+	_ZN18NmBaseClientPlugin27deleteMessageFromViewerViewEv @ 155 NONAME
+	_ZN18NmBaseClientPlugin6attachEv @ 156 NONAME
+	_ZN18NmBaseClientPlugin6searchEv @ 157 NONAME
+	_ZN18NmBaseClientPlugin7refreshEv @ 158 NONAME
+	_ZN18NmBaseClientPlugin8goOnlineERK4NmId @ 159 NONAME
+	_ZN18NmBaseClientPlugin8sendMailEv @ 160 NONAME
+	_ZN18NmBaseClientPlugin8settingsEv @ 161 NONAME
+	_ZN18NmBaseClientPlugin9goOfflineERK4NmId @ 162 NONAME
+	_ZN18NmBaseClientPlugin9replyMailEv @ 163 NONAME
+	_ZN18NmBaseClientPluginC2Ev @ 164 NONAME
+	_ZN18NmBaseClientPluginD0Ev @ 165 NONAME
+	_ZN18NmBaseClientPluginD1Ev @ 166 NONAME
+	_ZN18NmBaseClientPluginD2Ev @ 167 NONAME
+	_ZN18NmMailboxListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 168 NONAME
+	_ZN18NmMailboxListModel11qt_metacastEPKc @ 169 NONAME
+	_ZN18NmMailboxListModel16refreshModelItemERK4NmId @ 170 NONAME
+	_ZN18NmMailboxListModel16staticMetaObjectE @ 171 NONAME DATA 16
+	_ZN18NmMailboxListModel17createMailboxItemEPK9NmMailbox @ 172 NONAME
+	_ZN18NmMailboxListModel18handleMailboxEventE14NmMailboxEventRK5QListI4NmIdE @ 173 NONAME
+	_ZN18NmMailboxListModel19getStaticMetaObjectEv @ 174 NONAME
+	_ZN18NmMailboxListModel7refreshER5QListIP9NmMailboxE @ 175 NONAME
+	_ZN18NmMailboxListModelC1ER13NmDataManagerP7QObject @ 176 NONAME
+	_ZN18NmMailboxListModelC2ER13NmDataManagerP7QObject @ 177 NONAME
+	_ZN18NmMailboxListModelD0Ev @ 178 NONAME
+	_ZN18NmMailboxListModelD1Ev @ 179 NONAME
+	_ZN18NmMailboxListModelD2Ev @ 180 NONAME
+	_ZN18NmMessageListModel10removeItemEiR22NmMessageListModelItem @ 181 NONAME
+	_ZN18NmMessageListModel11qt_metacallEN11QMetaObject4CallEiPPv @ 182 NONAME
+	_ZN18NmMessageListModel11qt_metacastEPKc @ 183 NONAME
+	_ZN18NmMessageListModel11setDividersEb @ 184 NONAME
+	_ZN18NmMessageListModel11setNewParamEP14NmUiStartParam @ 185 NONAME
+	_ZN18NmMessageListModel13itemFromModelERK4NmId @ 186 NONAME
+	_ZN18NmMessageListModel14dividersActiveEv @ 187 NONAME
+	_ZN18NmMessageListModel14updateEnvelopeE20NmEnvelopePropertiesRK4NmId @ 188 NONAME
+	_ZN18NmMessageListModel16currentMailboxIdEv @ 189 NONAME
+	_ZN18NmMessageListModel16staticMetaObjectE @ 190 NONAME DATA 16
+	_ZN18NmMessageListModel17createMessageItemEP17NmMessageEnvelope @ 191 NONAME
+	_ZN18NmMessageListModel18handleMessageEventE14NmMessageEventRK4NmIdRK5QListIS1_ES3_ @ 192 NONAME
+	_ZN18NmMessageListModel18setIgnoreFolderIdsEb @ 193 NONAME
+	_ZN18NmMessageListModel19getStaticMetaObjectEv @ 194 NONAME
+	_ZN18NmMessageListModel21dividerInsertionIndexEi @ 195 NONAME
+	_ZN18NmMessageListModel21setEnvelopePropertiesE20NmEnvelopePropertiesRK5QListI4NmIdE @ 196 NONAME
+	_ZN18NmMessageListModel21updateMessageEnvelopeERK4NmIdS2_S2_ @ 197 NONAME
+	_ZN18NmMessageListModel22createTitleDividerItemEP17NmMessageEnvelope @ 198 NONAME
+	_ZN18NmMessageListModel22insertDividerIntoModelEP17NmMessageEnvelopei @ 199 NONAME
+	_ZN18NmMessageListModel22insertMessageIntoModelEP17NmMessageEnvelopeib @ 200 NONAME
+	_ZN18NmMessageListModel22removeMessageFromModelERK4NmId @ 201 NONAME
+	_ZN18NmMessageListModel25insertNewMessageIntoModelERK4NmIdS2_S2_ @ 202 NONAME
+	_ZN18NmMessageListModel7changedERK17NmMessageEnvelopeS2_ @ 203 NONAME
+	_ZN18NmMessageListModel7refreshE4NmIdS0_RK5QListIP17NmMessageEnvelopeE @ 204 NONAME
+	_ZN18NmMessageListModelC1ER13NmDataManagerP7QObject @ 205 NONAME
+	_ZN18NmMessageListModelC2ER13NmDataManagerP7QObject @ 206 NONAME
+	_ZN18NmMessageListModelD0Ev @ 207 NONAME
+	_ZN18NmMessageListModelD1Ev @ 208 NONAME
+	_ZN18NmMessageListModelD2Ev @ 209 NONAME
+	_ZN19NmDataPluginFactory10loadPluginERK4QDirRK7QString @ 210 NONAME
+	_ZN19NmDataPluginFactory12mPluginArrayE @ 211 NONAME DATA 4
+	_ZN19NmDataPluginFactory14pluginInstanceE4NmId @ 212 NONAME
+	_ZN19NmDataPluginFactory15mReferenceCountE @ 213 NONAME DATA 4
+	_ZN19NmDataPluginFactory15pluginInstancesEv @ 214 NONAME
+	_ZN19NmDataPluginFactory15releaseInstanceERPS_ @ 215 NONAME
+	_ZN19NmDataPluginFactory17interfaceInstanceE4NmId @ 216 NONAME
+	_ZN19NmDataPluginFactory17interfaceInstanceEP7QObject @ 217 NONAME
+	_ZN19NmDataPluginFactory18mPluginLoaderArrayE @ 218 NONAME DATA 4
+	_ZN19NmDataPluginFactory33applicationStateInterfaceInstanceE4NmId @ 219 NONAME
+	_ZN19NmDataPluginFactory33applicationStateInterfaceInstanceEP7QObject @ 220 NONAME
+	_ZN19NmDataPluginFactory8instanceEv @ 221 NONAME
+	_ZN19NmDataPluginFactory9mInstanceE @ 222 NONAME DATA 4
+	_ZN19NmDataPluginFactoryC1Ev @ 223 NONAME
+	_ZN19NmDataPluginFactoryC2Ev @ 224 NONAME
+	_ZN19NmDataPluginFactoryD0Ev @ 225 NONAME
+	_ZN19NmDataPluginFactoryD1Ev @ 226 NONAME
+	_ZN19NmDataPluginFactoryD2Ev @ 227 NONAME
+	_ZN22NmMessageListModelItem11envelopePtrEv @ 228 NONAME
+	_ZN22NmMessageListModelItem11setEnvelopeEP17NmMessageEnvelope @ 229 NONAME
+	_ZN22NmMessageListModelItem11setEnvelopeERK17NmMessageEnvelope @ 230 NONAME
+	_ZN22NmMessageListModelItem11setExpandedEb @ 231 NONAME
+	_ZN22NmMessageListModelItem11setItemTypeENS_17NmMessageItemTypeE @ 232 NONAME
+	_ZN22NmMessageListModelItem15setTitleDividerERK7QString @ 233 NONAME
+	_ZN22NmMessageListModelItem19callEmitDataChangedEv @ 234 NONAME
+	_ZN22NmMessageListModelItemC1Ev @ 235 NONAME
+	_ZN22NmMessageListModelItemC2Ev @ 236 NONAME
+	_ZN22NmMessageListModelItemD0Ev @ 237 NONAME
+	_ZN22NmMessageListModelItemD1Ev @ 238 NONAME
+	_ZN22NmMessageListModelItemD2Ev @ 239 NONAME
+	_ZN25NmAddAttachmentsOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 240 NONAME
+	_ZN25NmAddAttachmentsOperation11qt_metacastEPKc @ 241 NONAME
+	_ZN25NmAddAttachmentsOperation16staticMetaObjectE @ 242 NONAME DATA 16
+	_ZN25NmAddAttachmentsOperation19getStaticMetaObjectEv @ 243 NONAME
+	_ZN25NmAddAttachmentsOperation21completeOperationPartERK7QStringRK4NmIdi @ 244 NONAME
+	_ZN25NmAddAttachmentsOperation22operationPartCompletedERK7QStringRK4NmIdi @ 245 NONAME
+	_ZN25NmAddAttachmentsOperationC2Ev @ 246 NONAME
+	_ZN25NmAddAttachmentsOperationD0Ev @ 247 NONAME
+	_ZN25NmAddAttachmentsOperationD1Ev @ 248 NONAME
+	_ZN25NmAddAttachmentsOperationD2Ev @ 249 NONAME
+	_ZN25NmStoreEnvelopesOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 250 NONAME
+	_ZN25NmStoreEnvelopesOperation11qt_metacastEPKc @ 251 NONAME
+	_ZN25NmStoreEnvelopesOperation16staticMetaObjectE @ 252 NONAME DATA 16
+	_ZN25NmStoreEnvelopesOperation19getStaticMetaObjectEv @ 253 NONAME
+	_ZN26NmMessageCreationOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 254 NONAME
+	_ZN26NmMessageCreationOperation11qt_metacastEPKc @ 255 NONAME
+	_ZN26NmMessageCreationOperation16staticMetaObjectE @ 256 NONAME DATA 16
+	_ZN26NmMessageCreationOperation19getStaticMetaObjectEv @ 257 NONAME
+	_ZN7NmIcons7getIconENS_4IconE @ 258 NONAME
+	_ZN7NmIcons9freeIconsEv @ 259 NONAME
+	_ZNK10NmUiEngine10metaObjectEv @ 260 NONAME
+	_ZNK10NmUiEngine16isSendingMessageEv @ 261 NONAME
+	_ZNK10NmUiEngine16messageBeingSentEv @ 262 NONAME
+	_ZNK11NmOperation10metaObjectEv @ 263 NONAME
+	_ZNK11NmOperation9isRunningEv @ 264 NONAME
+	_ZNK13NmDataManager10metaObjectEv @ 265 NONAME
+	_ZNK16NmFolderMetaData2idEv @ 266 NONAME
+	_ZNK16NmFolderMetaData4nameEv @ 267 NONAME
+	_ZNK17NmFolderListModel11columnCountERK11QModelIndex @ 268 NONAME
+	_ZNK17NmFolderListModel4dataERK11QModelIndexi @ 269 NONAME
+	_ZNK17NmFolderListModel6parentERK11QModelIndex @ 270 NONAME
+	_ZNK17NmFolderListModel8rowCountERK11QModelIndex @ 271 NONAME
+	_ZNK17NmMailboxMetaData2idEv @ 272 NONAME
+	_ZNK17NmMailboxMetaData4nameEv @ 273 NONAME
+	_ZNK17NmMailboxMetaData6IconIdEv @ 274 NONAME
+	_ZNK17NmMailboxMetaData7addressEv @ 275 NONAME
+	_ZNK18NmBaseClientPlugin10metaObjectEv @ 276 NONAME
+	_ZNK18NmMailboxListModel10metaObjectEv @ 277 NONAME
+	_ZNK18NmMailboxListModel4dataERK11QModelIndexi @ 278 NONAME
+	_ZNK18NmMessageListModel10metaObjectEv @ 279 NONAME
+	_ZNK18NmMessageListModel17getInsertionIndexERK17NmMessageEnvelope @ 280 NONAME
+	_ZNK18NmMessageListModel30messagesBelongUnderSameDividerEPK17NmMessageEnvelopeS2_ @ 281 NONAME
+	_ZNK18NmMessageListModel4dataERK11QModelIndexi @ 282 NONAME
+	_ZNK22NmMessageListModelItem12titleDividerEv @ 283 NONAME
+	_ZNK22NmMessageListModelItem8envelopeEv @ 284 NONAME
+	_ZNK22NmMessageListModelItem8expandedEv @ 285 NONAME
+	_ZNK22NmMessageListModelItem8itemTypeEv @ 286 NONAME
+	_ZNK25NmAddAttachmentsOperation10metaObjectEv @ 287 NONAME
+	_ZNK25NmStoreEnvelopesOperation10metaObjectEv @ 288 NONAME
+	_ZNK26NmMessageCreationOperation10metaObjectEv @ 289 NONAME
+	_ZTI10NmUiEngine @ 290 NONAME
+	_ZTI11NmOperation @ 291 NONAME
+	_ZTI13NmDataManager @ 292 NONAME
+	_ZTI16NmFolderMetaData @ 293 NONAME
+	_ZTI17NmFolderListModel @ 294 NONAME
+	_ZTI17NmMailboxMetaData @ 295 NONAME
+	_ZTI18NmBaseClientPlugin @ 296 NONAME
+	_ZTI18NmMailboxListModel @ 297 NONAME
+	_ZTI18NmMessageListModel @ 298 NONAME
+	_ZTI19NmDataPluginFactory @ 299 NONAME
+	_ZTI22NmMessageListModelItem @ 300 NONAME
+	_ZTI25NmAddAttachmentsOperation @ 301 NONAME
+	_ZTI25NmStoreEnvelopesOperation @ 302 NONAME
+	_ZTI26NmMessageCreationOperation @ 303 NONAME
+	_ZTV10NmUiEngine @ 304 NONAME
+	_ZTV11NmOperation @ 305 NONAME
+	_ZTV13NmDataManager @ 306 NONAME
+	_ZTV16NmFolderMetaData @ 307 NONAME
+	_ZTV17NmFolderListModel @ 308 NONAME
+	_ZTV17NmMailboxMetaData @ 309 NONAME
+	_ZTV18NmBaseClientPlugin @ 310 NONAME
+	_ZTV18NmMailboxListModel @ 311 NONAME
+	_ZTV18NmMessageListModel @ 312 NONAME
+	_ZTV19NmDataPluginFactory @ 313 NONAME
+	_ZTV22NmMessageListModelItem @ 314 NONAME
+	_ZTV25NmAddAttachmentsOperation @ 315 NONAME
+	_ZTV25NmStoreEnvelopesOperation @ 316 NONAME
+	_ZTV26NmMessageCreationOperation @ 317 NONAME
+	_ZThn8_N18NmBaseClientPlugin10getActionsERK15NmActionRequestR5QListIP8NmActionE @ 318 NONAME
+	_ZThn8_N18NmBaseClientPluginD0Ev @ 319 NONAME
+	_ZThn8_N18NmBaseClientPluginD1Ev @ 320 NONAME
 
--- a/emailuis/nmailuiengine/inc/nmdataplugininterface.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiengine/inc/nmdataplugininterface.h	Thu Jun 24 14:32:18 2010 +0300
@@ -59,7 +59,7 @@
     
     virtual int getMailboxById(const NmId &id, NmMailbox *&mailbox) = 0;
     
-    virtual int deleteMailboxById(const NmId &id) = 0;
+    virtual QPointer<NmOperation> deleteMailboxById(const NmId &id) = 0;
     
     virtual int getMessageById(
         const NmId &mailboxId,
@@ -186,6 +186,12 @@
     virtual int cancelSearch(const NmId &mailboxId) = 0;
 
     virtual QPointer<NmOperation> removeDraftMessage(NmMessage *message) = 0;
+
+    virtual int copyMessages(
+        const NmId &mailboxId,
+        const QList<quint64> &messageIds, 
+        const NmId &sourceFolderId,
+        const NmId &destinationFolderId) = 0;
 };
 
 Q_DECLARE_INTERFACE(NmDataPluginInterface, "sf.app.commonmail.emailuis.nmailuiengine.NmDataPluginInterface/1.0")
--- a/emailuis/nmailuiengine/inc/nmuiengine.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiengine/inc/nmuiengine.h	Thu Jun 24 14:32:18 2010 +0300
@@ -55,6 +55,8 @@
 
     void refreshMailboxListModel();
 
+    NmId getPluginIdByMailboxId(quint32 accountId);
+    
     NmMessageListModel &messageListModel(const NmId &mailboxId,
                                          const NmId &folderId);
 
--- a/emailuis/nmailuiengine/src/nmuiengine.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiengine/src/nmuiengine.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -82,7 +82,7 @@
 
 
 /*!
-    Destructor
+    Class destructor.
 */
 NmUiEngine::~NmUiEngine()
 {
@@ -95,46 +95,66 @@
         delete mMessageSearchListModel;
         mMessageSearchListModel = NULL;
     }
+
     if (mInboxListModel) {
         delete mInboxListModel;
         mInboxListModel = NULL;
-    }  
+    }
+
     if (mMessageListModel) {
         delete mMessageListModel;
         mMessageListModel = NULL;
     }
+
     if (mMailboxListModel) {
         delete mMailboxListModel;
         mMailboxListModel = NULL;
     }
-    // do the unsubscriptions
+
+    // Do the unsubscriptions.
     QList<NmId> mailboxIdList;
     mDataManager->listMailboxIds(mailboxIdList);
+
     for (int i(0); i < mailboxIdList.count(); i++) {
         NmId id = mailboxIdList[i];
-        NmDataPluginInterface *pluginInterface = mPluginFactory->interfaceInstance(id);
+        NmDataPluginInterface *pluginInterface =
+            mPluginFactory->interfaceInstance(id);
+
         if (pluginInterface) {
             pluginInterface->unsubscribeMailboxEvents(id);
         }
     }
+
     mailboxIdList.clear();
+
     NmDataPluginFactory::releaseInstance(mPluginFactory);
+
     delete mDataManager;
+
+    // Cancel all operations.
     if (mSendOperation && mSendOperation->isRunning()) {
         mSendOperation->cancelOperation();
     }
-    if(mRemoveDraftOperation && mRemoveDraftOperation->isRunning()) {
+
+    if (mRemoveDraftOperation && mRemoveDraftOperation->isRunning()) {
         mRemoveDraftOperation->cancelOperation();        
     }
-    if(mSaveDraftOperation && mSaveDraftOperation->isRunning()) {
+
+    if (mSaveDraftOperation && mSaveDraftOperation->isRunning()) {
         mSaveDraftOperation->cancelOperation();
     }
+
+    // Call processEvents() to ensure that the cancelled operations get the time
+    // they need to destroy themselves.
+    qApp->processEvents();
+
     if(mDraftMessage) {
         delete mDraftMessage;
         mDraftMessage = NULL;
     }
 }
 
+
 /*!
 
 */
@@ -1235,3 +1255,23 @@
         emit operationCompleted(event);
     }
 }
+
+/*!
+    returns full mailbox id from plain account id
+*/
+NmId NmUiEngine::getPluginIdByMailboxId(quint32 accountId)
+{
+    NM_FUNCTION;
+    
+    NmId fullId = NULL;
+    fullId.setId32(accountId);
+    QList<NmId> mailboxList;
+    if(mDataManager){
+        mDataManager->listMailboxIds(mailboxList);
+        for(int i=0;i<mailboxList.count();i++){
+            if(mailboxList.at(i).id32() == accountId)
+                fullId.setPluginId32(mailboxList.at(i).pluginId32());
+            }
+        }
+    return fullId;
+}
--- a/emailuis/nmailuiwidgets/bwins/nmailuiwidgetsu.def	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/bwins/nmailuiwidgetsu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -1,138 +1,132 @@
 EXPORTS
 	?trUtf8@NmAttachmentListItem@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString NmAttachmentListItem::trUtf8(char const *, char const *, int)
-	?itemActivated@NmAttachmentListWidget@@IAEXH@Z @ 2 NONAME ; void NmAttachmentListWidget::itemActivated(int)
-	?textCursor@NmHtmlLineEdit@@QBE?AVQTextCursor@@XZ @ 3 NONAME ; class QTextCursor NmHtmlLineEdit::textCursor(void) const
-	?keyPressEvent@NmRecipientLineEdit@@MAEXPAVQKeyEvent@@@Z @ 4 NONAME ; void NmRecipientLineEdit::keyPressEvent(class QKeyEvent *)
-	?paint@NmAttachmentListWidget@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 5 NONAME ; void NmAttachmentListWidget::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
-	?tr@NmEditorTextEdit@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString NmEditorTextEdit::tr(char const *, char const *, int)
-	?toHtml@NmHtmlLineEdit@@QBE?AVQString@@XZ @ 7 NONAME ; class QString NmHtmlLineEdit::toHtml(void) const
-	?metaObject@NmBaseViewScrollArea@@UBEPBUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const * NmBaseViewScrollArea::metaObject(void) const
-	?init@NmEditorTextEdit@@QAEXPAVNmBaseViewScrollArea@@@Z @ 9 NONAME ; void NmEditorTextEdit::init(class NmBaseViewScrollArea *)
-	?emailAddressList@NmRecipientLineEdit@@QAE?AV?$QList@VNmAddress@@@@XZ @ 10 NONAME ; class QList<class NmAddress> NmRecipientLineEdit::emailAddressList(void)
-	?getStaticMetaObject@NmAttachmentListItem@@SAABUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const & NmAttachmentListItem::getStaticMetaObject(void)
-	?getStaticMetaObject@NmBaseViewScrollArea@@SAABUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const & NmBaseViewScrollArea::getStaticMetaObject(void)
-	?getStaticMetaObject@NmAttachmentListWidget@@SAABUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const & NmAttachmentListWidget::getStaticMetaObject(void)
-	??_ENmAttachmentListItem@@UAE@I@Z @ 14 NONAME ; NmAttachmentListItem::~NmAttachmentListItem(unsigned int)
-	?updateEditorHeight@NmEditorTextEdit@@QAEXXZ @ 15 NONAME ; void NmEditorTextEdit::updateEditorHeight(void)
-	?qt_metacast@NmHtmlLineEdit@@UAEPAXPBD@Z @ 16 NONAME ; void * NmHtmlLineEdit::qt_metacast(char const *)
-	?metaObject@NmEditorTextEdit@@UBEPBUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const * NmEditorTextEdit::metaObject(void) const
-	?setFileNameText@NmAttachmentListItem@@QAEXABVQString@@@Z @ 18 NONAME ; void NmAttachmentListItem::setFileNameText(class QString const &)
-	?qt_metacast@NmBaseViewScrollArea@@UAEPAXPBD@Z @ 19 NONAME ; void * NmBaseViewScrollArea::qt_metacast(char const *)
-	?tr@NmBaseViewScrollArea@@SA?AVQString@@PBD0H@Z @ 20 NONAME ; class QString NmBaseViewScrollArea::tr(char const *, char const *, int)
-	?qt_metacall@NmAttachmentListWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 21 NONAME ; int NmAttachmentListWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?trUtf8@NmAttachmentListWidget@@SA?AVQString@@PBD0H@Z @ 22 NONAME ; class QString NmAttachmentListWidget::trUtf8(char const *, char const *, int)
-	?qt_metacall@NmRecipientLineEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 23 NONAME ; int NmRecipientLineEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
-	??0NmAttachmentListItem@@QAE@PAVQGraphicsItem@@@Z @ 24 NONAME ; NmAttachmentListItem::NmAttachmentListItem(class QGraphicsItem *)
-	?trUtf8@NmBaseViewScrollArea@@SA?AVQString@@PBD0H@Z @ 25 NONAME ; class QString NmBaseViewScrollArea::trUtf8(char const *, char const *, int)
-	??1NmHtmlLineEdit@@UAE@XZ @ 26 NONAME ; NmHtmlLineEdit::~NmHtmlLineEdit(void)
-	?setProgressBarValue@NmAttachmentListItem@@QAEXH@Z @ 27 NONAME ; void NmAttachmentListItem::setProgressBarValue(int)
-	?trUtf8@NmHtmlLineEdit@@SA?AVQString@@PBD0@Z @ 28 NONAME ; class QString NmHtmlLineEdit::trUtf8(char const *, char const *)
-	?gestureEvent@NmAttachmentListItem@@MAEXPAVQGestureEvent@@@Z @ 29 NONAME ; void NmAttachmentListItem::gestureEvent(class QGestureEvent *)
-	??0NmRecipientLineEdit@@QAE@PAVQGraphicsItem@@@Z @ 30 NONAME ; NmRecipientLineEdit::NmRecipientLineEdit(class QGraphicsItem *)
-	?setAttachmentSize@NmAttachmentListWidget@@QAEXHABVQString@@@Z @ 31 NONAME ; void NmAttachmentListWidget::setAttachmentSize(int, class QString const &)
-	?trUtf8@NmEditorTextEdit@@SA?AVQString@@PBD0H@Z @ 32 NONAME ; class QString NmEditorTextEdit::trUtf8(char const *, char const *, int)
-	?setPlainText@NmHtmlLineEdit@@QAEXABVQString@@@Z @ 33 NONAME ; void NmHtmlLineEdit::setPlainText(class QString const &)
-	?longPressGesture@NmBaseViewScrollArea@@MAEXABVQPointF@@@Z @ 34 NONAME ; void NmBaseViewScrollArea::longPressGesture(class QPointF const &)
-	?updateCustomTextColor@NmEditorTextEdit@@QAEXXZ @ 35 NONAME ; void NmEditorTextEdit::updateCustomTextColor(void)
-	?orientationChanged@NmAttachmentListWidget@@AAEXW4Orientation@Qt@@@Z @ 36 NONAME ; void NmAttachmentListWidget::orientationChanged(enum Qt::Orientation)
-	?insertSelectedContacts@NmRecipientLineEdit@@QAEXABVQVariant@@@Z @ 37 NONAME ; void NmRecipientLineEdit::insertSelectedContacts(class QVariant const &)
-	?qt_metacast@NmAttachmentListWidget@@UAEPAXPBD@Z @ 38 NONAME ; void * NmAttachmentListWidget::qt_metacast(char const *)
-	?getStaticMetaObject@NmHtmlLineEdit@@SAABUQMetaObject@@XZ @ 39 NONAME ; struct QMetaObject const & NmHtmlLineEdit::getStaticMetaObject(void)
-	?qt_metacall@NmEditorTextEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 40 NONAME ; int NmEditorTextEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
-	??1NmAttachmentListWidget@@UAE@XZ @ 41 NONAME ; NmAttachmentListWidget::~NmAttachmentListWidget(void)
-	??_ENmRecipientLineEdit@@UAE@I@Z @ 42 NONAME ; NmRecipientLineEdit::~NmRecipientLineEdit(unsigned int)
-	?qt_metacast@NmRecipientLineEdit@@UAEPAXPBD@Z @ 43 NONAME ; void * NmRecipientLineEdit::qt_metacast(char const *)
-	?setCustomTextColor@NmEditorTextEdit@@QAEXABU?$QPair@_NVQColor@@@@@Z @ 44 NONAME ; void NmEditorTextEdit::setCustomTextColor(struct QPair<bool, class QColor> const &)
-	?setDocument@NmHtmlLineEdit@@QAEXPAVQTextDocument@@@Z @ 45 NONAME ; void NmHtmlLineEdit::setDocument(class QTextDocument *)
-	?trUtf8@NmEditorTextEdit@@SA?AVQString@@PBD0@Z @ 46 NONAME ; class QString NmEditorTextEdit::trUtf8(char const *, char const *)
-	??0NmBaseViewScrollArea@@QAE@PAVQGraphicsItem@@@Z @ 47 NONAME ; NmBaseViewScrollArea::NmBaseViewScrollArea(class QGraphicsItem *)
-	?longPressed@NmAttachmentListWidget@@IAEXHVQPointF@@@Z @ 48 NONAME ; void NmAttachmentListWidget::longPressed(int, class QPointF)
-	?staticMetaObject@NmEditorTextEdit@@2UQMetaObject@@B @ 49 NONAME ; struct QMetaObject const NmEditorTextEdit::staticMetaObject
-	??0NmEditorTextEdit@@QAE@PAVQGraphicsItem@@@Z @ 50 NONAME ; NmEditorTextEdit::NmEditorTextEdit(class QGraphicsItem *)
-	??_ENmEditorTextEdit@@UAE@I@Z @ 51 NONAME ; NmEditorTextEdit::~NmEditorTextEdit(unsigned int)
-	?hideProgressBar@NmAttachmentListItem@@QAEXXZ @ 52 NONAME ; void NmAttachmentListItem::hideProgressBar(void)
-	?qt_metacast@NmAttachmentListItem@@UAEPAXPBD@Z @ 53 NONAME ; void * NmAttachmentListItem::qt_metacast(char const *)
-	?handleMouseReleaseEvent@NmBaseViewScrollArea@@IAEXPAVQGraphicsSceneMouseEvent@@@Z @ 54 NONAME ; void NmBaseViewScrollArea::handleMouseReleaseEvent(class QGraphicsSceneMouseEvent *)
-	?removeProgressBar@NmAttachmentListItem@@AAEXXZ @ 55 NONAME ; void NmAttachmentListItem::removeProgressBar(void)
-	??1NmBaseViewScrollArea@@UAE@XZ @ 56 NONAME ; NmBaseViewScrollArea::~NmBaseViewScrollArea(void)
-	??_ENmHtmlLineEdit@@UAE@I@Z @ 57 NONAME ; NmHtmlLineEdit::~NmHtmlLineEdit(unsigned int)
-	?tr@NmAttachmentListWidget@@SA?AVQString@@PBD0H@Z @ 58 NONAME ; class QString NmAttachmentListWidget::tr(char const *, char const *, int)
-	?handleMousePressEvent@NmBaseViewScrollArea@@IAEXPAVQGraphicsSceneMouseEvent@@@Z @ 59 NONAME ; void NmBaseViewScrollArea::handleMousePressEvent(class QGraphicsSceneMouseEvent *)
-	?insertItemToLayout@NmAttachmentListWidget@@AAEXPAVNmAttachmentListItem@@@Z @ 60 NONAME ; void NmAttachmentListWidget::insertItemToLayout(class NmAttachmentListItem *)
-	?metaObject@NmHtmlLineEdit@@UBEPBUQMetaObject@@XZ @ 61 NONAME ; struct QMetaObject const * NmHtmlLineEdit::metaObject(void) const
-	?editorContentHeightChanged@NmEditorTextEdit@@IAEXXZ @ 62 NONAME ; void NmEditorTextEdit::editorContentHeightChanged(void)
-	?setTextColor@NmAttachmentListItem@@QAEXVQColor@@@Z @ 63 NONAME ; void NmAttachmentListItem::setTextColor(class QColor)
-	??1NmAttachmentListItem@@UAE@XZ @ 64 NONAME ; NmAttachmentListItem::~NmAttachmentListItem(void)
-	?count@NmAttachmentListWidget@@QBEHXZ @ 65 NONAME ; int NmAttachmentListWidget::count(void) const
-	?handleTextChanged@NmRecipientLineEdit@@AAEXABVQString@@@Z @ 66 NONAME ; void NmRecipientLineEdit::handleTextChanged(class QString const &)
-	?handleLongPressGesture@NmBaseViewScrollArea@@IAEXABVQPointF@@@Z @ 67 NONAME ; void NmBaseViewScrollArea::handleLongPressGesture(class QPointF const &)
-	?updateScrollPosition@NmEditorTextEdit@@QAEXABVQPointF@@@Z @ 68 NONAME ; void NmEditorTextEdit::updateScrollPosition(class QPointF const &)
-	?contentHeight@NmEditorTextEdit@@QBEMXZ @ 69 NONAME ; float NmEditorTextEdit::contentHeight(void) const
-	?qt_metacast@NmEditorTextEdit@@UAEPAXPBD@Z @ 70 NONAME ; void * NmEditorTextEdit::qt_metacast(char const *)
-	?mouseMoveEvent@NmBaseViewScrollArea@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 71 NONAME ; void NmBaseViewScrollArea::mouseMoveEvent(class QGraphicsSceneMouseEvent *)
-	?qt_metacall@NmAttachmentListItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 72 NONAME ; int NmAttachmentListItem::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?handleLongPressed@NmAttachmentListWidget@@AAEXVQPointF@@@Z @ 73 NONAME ; void NmAttachmentListWidget::handleLongPressed(class QPointF)
-	?staticMetaObject@NmBaseViewScrollArea@@2UQMetaObject@@B @ 74 NONAME ; struct QMetaObject const NmBaseViewScrollArea::staticMetaObject
-	?setHeaderHeight@NmEditorTextEdit@@QAEXH@Z @ 75 NONAME ; void NmEditorTextEdit::setHeaderHeight(int)
-	?init@NmAttachmentListWidget@@AAEXXZ @ 76 NONAME ; void NmAttachmentListWidget::init(void)
-	?rearrangeLayout@NmAttachmentListWidget@@AAEXXZ @ 77 NONAME ; void NmAttachmentListWidget::rearrangeLayout(void)
-	?trUtf8@NmRecipientLineEdit@@SA?AVQString@@PBD0@Z @ 78 NONAME ; class QString NmRecipientLineEdit::trUtf8(char const *, char const *)
-	?metaObject@NmRecipientLineEdit@@UBEPBUQMetaObject@@XZ @ 79 NONAME ; struct QMetaObject const * NmRecipientLineEdit::metaObject(void) const
-	?tr@NmAttachmentListItem@@SA?AVQString@@PBD0@Z @ 80 NONAME ; class QString NmAttachmentListItem::tr(char const *, char const *)
-	?trUtf8@NmAttachmentListItem@@SA?AVQString@@PBD0@Z @ 81 NONAME ; class QString NmAttachmentListItem::trUtf8(char const *, char const *)
-	?tr@NmBaseViewScrollArea@@SA?AVQString@@PBD0@Z @ 82 NONAME ; class QString NmBaseViewScrollArea::tr(char const *, char const *)
-	?trUtf8@NmBaseViewScrollArea@@SA?AVQString@@PBD0@Z @ 83 NONAME ; class QString NmBaseViewScrollArea::trUtf8(char const *, char const *)
-	?setFileSizeText@NmAttachmentListItem@@QAEXABVQString@@@Z @ 84 NONAME ; void NmAttachmentListItem::setFileSizeText(class QString const &)
-	?customTextColor@NmEditorTextEdit@@QBE?AU?$QPair@_NVQColor@@@@XZ @ 85 NONAME ; struct QPair<bool, class QColor> NmEditorTextEdit::customTextColor(void) const
-	?staticMetaObject@NmHtmlLineEdit@@2UQMetaObject@@B @ 86 NONAME ; struct QMetaObject const NmHtmlLineEdit::staticMetaObject
-	?inputMethodEvent@NmRecipientLineEdit@@MAEXPAVQInputMethodEvent@@@Z @ 87 NONAME ; void NmRecipientLineEdit::inputMethodEvent(class QInputMethodEvent *)
-	?mouseReleaseEvent@NmBaseViewScrollArea@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 88 NONAME ; void NmBaseViewScrollArea::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
-	?constructUi@NmAttachmentListWidget@@AAEXXZ @ 89 NONAME ; void NmAttachmentListWidget::constructUi(void)
-	?toPlainText@NmHtmlLineEdit@@QBE?AVQString@@XZ @ 90 NONAME ; class QString NmHtmlLineEdit::toPlainText(void) const
-	?getStaticMetaObject@NmEditorTextEdit@@SAABUQMetaObject@@XZ @ 91 NONAME ; struct QMetaObject const & NmEditorTextEdit::getStaticMetaObject(void)
-	?setScrollPosition@NmEditorTextEdit@@QAEXHH@Z @ 92 NONAME ; void NmEditorTextEdit::setScrollPosition(int, int)
-	?tr@NmEditorTextEdit@@SA?AVQString@@PBD0@Z @ 93 NONAME ; class QString NmEditorTextEdit::tr(char const *, char const *)
-	?staticMetaObject@NmAttachmentListItem@@2UQMetaObject@@B @ 94 NONAME ; struct QMetaObject const NmAttachmentListItem::staticMetaObject
-	??_ENmBaseViewScrollArea@@UAE@I@Z @ 95 NONAME ; NmBaseViewScrollArea::~NmBaseViewScrollArea(unsigned int)
-	?itemLongPressed@NmAttachmentListItem@@IAEXVQPointF@@@Z @ 96 NONAME ; void NmAttachmentListItem::itemLongPressed(class QPointF)
-	?progressBarValue@NmAttachmentListItem@@QBEHXZ @ 97 NONAME ; int NmAttachmentListItem::progressBarValue(void) const
-	?setCustomTextColor@NmEditorTextEdit@@QAEX_NABVQColor@@@Z @ 98 NONAME ; void NmEditorTextEdit::setCustomTextColor(bool, class QColor const &)
-	??0NmHtmlLineEdit@@QAE@PAVQGraphicsItem@@@Z @ 99 NONAME ; NmHtmlLineEdit::NmHtmlLineEdit(class QGraphicsItem *)
-	?init@NmAttachmentListItem@@AAEXXZ @ 100 NONAME ; void NmAttachmentListItem::init(void)
-	?tr@NmRecipientLineEdit@@SA?AVQString@@PBD0@Z @ 101 NONAME ; class QString NmRecipientLineEdit::tr(char const *, char const *)
-	??1NmEditorTextEdit@@UAE@XZ @ 102 NONAME ; NmEditorTextEdit::~NmEditorTextEdit(void)
-	?generateEmailAddressList@NmRecipientLineEdit@@AAEXXZ @ 103 NONAME ; void NmRecipientLineEdit::generateEmailAddressList(void)
-	?trUtf8@NmAttachmentListWidget@@SA?AVQString@@PBD0@Z @ 104 NONAME ; class QString NmAttachmentListWidget::trUtf8(char const *, char const *)
-	?mousePressEvent@NmBaseViewScrollArea@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 105 NONAME ; void NmBaseViewScrollArea::mousePressEvent(class QGraphicsSceneMouseEvent *)
-	?handleItemActivated@NmAttachmentListWidget@@AAEXXZ @ 106 NONAME ; void NmAttachmentListWidget::handleItemActivated(void)
-	?metaObject@NmAttachmentListWidget@@UBEPBUQMetaObject@@XZ @ 107 NONAME ; struct QMetaObject const * NmAttachmentListWidget::metaObject(void) const
-	?constructUi@NmAttachmentListItem@@AAEXXZ @ 108 NONAME ; void NmAttachmentListItem::constructUi(void)
-	?trUtf8@NmHtmlLineEdit@@SA?AVQString@@PBD0H@Z @ 109 NONAME ; class QString NmHtmlLineEdit::trUtf8(char const *, char const *, int)
-	?setHtml@NmHtmlLineEdit@@QAEXABVQString@@@Z @ 110 NONAME ; void NmHtmlLineEdit::setHtml(class QString const &)
-	?tr@NmHtmlLineEdit@@SA?AVQString@@PBD0H@Z @ 111 NONAME ; class QString NmHtmlLineEdit::tr(char const *, char const *, int)
-	?itemActivated@NmAttachmentListItem@@IAEXXZ @ 112 NONAME ; void NmAttachmentListItem::itemActivated(void)
-	?tr@NmAttachmentListWidget@@SA?AVQString@@PBD0@Z @ 113 NONAME ; class QString NmAttachmentListWidget::tr(char const *, char const *)
-	?getStaticMetaObject@NmRecipientLineEdit@@SAABUQMetaObject@@XZ @ 114 NONAME ; struct QMetaObject const & NmRecipientLineEdit::getStaticMetaObject(void)
-	?findItem@NmAttachmentListWidget@@AAEHPBVQObject@@@Z @ 115 NONAME ; int NmAttachmentListWidget::findItem(class QObject const *)
-	??1NmRecipientLineEdit@@UAE@XZ @ 116 NONAME ; NmRecipientLineEdit::~NmRecipientLineEdit(void)
-	?removeAttachment@NmAttachmentListWidget@@QAEXH@Z @ 117 NONAME ; void NmAttachmentListWidget::removeAttachment(int)
-	?tr@NmRecipientLineEdit@@SA?AVQString@@PBD0H@Z @ 118 NONAME ; class QString NmRecipientLineEdit::tr(char const *, char const *, int)
-	?trUtf8@NmRecipientLineEdit@@SA?AVQString@@PBD0H@Z @ 119 NONAME ; class QString NmRecipientLineEdit::trUtf8(char const *, char const *, int)
-	?progressValue@NmAttachmentListWidget@@QBEHH@Z @ 120 NONAME ; int NmAttachmentListWidget::progressValue(int) const
-	?staticMetaObject@NmAttachmentListWidget@@2UQMetaObject@@B @ 121 NONAME ; struct QMetaObject const NmAttachmentListWidget::staticMetaObject
-	??_ENmAttachmentListWidget@@UAE@I@Z @ 122 NONAME ; NmAttachmentListWidget::~NmAttachmentListWidget(unsigned int)
-	?setTextColor@NmAttachmentListWidget@@QAEXVQColor@@@Z @ 123 NONAME ; void NmAttachmentListWidget::setTextColor(class QColor)
-	?setTextCursor@NmHtmlLineEdit@@QAEXABVQTextCursor@@@Z @ 124 NONAME ; void NmHtmlLineEdit::setTextCursor(class QTextCursor const &)
-	?handleMouseMoveEvent@NmBaseViewScrollArea@@IAEXPAVQGraphicsSceneMouseEvent@@@Z @ 125 NONAME ; void NmBaseViewScrollArea::handleMouseMoveEvent(class QGraphicsSceneMouseEvent *)
-	?staticMetaObject@NmRecipientLineEdit@@2UQMetaObject@@B @ 126 NONAME ; struct QMetaObject const NmRecipientLineEdit::staticMetaObject
-	?setProgressBarValue@NmAttachmentListWidget@@QAEXHH@Z @ 127 NONAME ; void NmAttachmentListWidget::setProgressBarValue(int, int)
-	?metaObject@NmAttachmentListItem@@UBEPBUQMetaObject@@XZ @ 128 NONAME ; struct QMetaObject const * NmAttachmentListItem::metaObject(void) const
-	?insertAttachment@NmAttachmentListWidget@@QAEXHABVQString@@0@Z @ 129 NONAME ; void NmAttachmentListWidget::insertAttachment(int, class QString const &, class QString const &)
-	?hideProgressBar@NmAttachmentListWidget@@QAEXH@Z @ 130 NONAME ; void NmAttachmentListWidget::hideProgressBar(int)
-	??0NmAttachmentListWidget@@QAE@PAVQGraphicsItem@@@Z @ 131 NONAME ; NmAttachmentListWidget::NmAttachmentListWidget(class QGraphicsItem *)
-	?tr@NmAttachmentListItem@@SA?AVQString@@PBD0H@Z @ 132 NONAME ; class QString NmAttachmentListItem::tr(char const *, char const *, int)
-	?document@NmHtmlLineEdit@@QBEPAVQTextDocument@@XZ @ 133 NONAME ; class QTextDocument * NmHtmlLineEdit::document(void) const
-	?qt_metacall@NmBaseViewScrollArea@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 134 NONAME ; int NmBaseViewScrollArea::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?qt_metacall@NmHtmlLineEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 135 NONAME ; int NmHtmlLineEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?tr@NmHtmlLineEdit@@SA?AVQString@@PBD0@Z @ 136 NONAME ; class QString NmHtmlLineEdit::tr(char const *, char const *)
+	?handleLongPressGesture@NmBaseViewScrollArea@@IAEXABVQPointF@@@Z @ 2 NONAME ; void NmBaseViewScrollArea::handleLongPressGesture(class QPointF const &)
+	?qt_metacast@NmEditorTextEdit@@UAEPAXPBD@Z @ 3 NONAME ; void * NmEditorTextEdit::qt_metacast(char const *)
+	?itemActivated@NmAttachmentListWidget@@IAEXH@Z @ 4 NONAME ; void NmAttachmentListWidget::itemActivated(int)
+	?mouseMoveEvent@NmBaseViewScrollArea@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 5 NONAME ; void NmBaseViewScrollArea::mouseMoveEvent(class QGraphicsSceneMouseEvent *)
+	?textCursor@NmHtmlLineEdit@@QBE?AVQTextCursor@@XZ @ 6 NONAME ; class QTextCursor NmHtmlLineEdit::textCursor(void) const
+	?qt_metacall@NmAttachmentListItem@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 7 NONAME ; int NmAttachmentListItem::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?keyPressEvent@NmRecipientLineEdit@@MAEXPAVQKeyEvent@@@Z @ 8 NONAME ; void NmRecipientLineEdit::keyPressEvent(class QKeyEvent *)
+	?handleLongPressed@NmAttachmentListWidget@@AAEXVQPointF@@@Z @ 9 NONAME ; void NmAttachmentListWidget::handleLongPressed(class QPointF)
+	?staticMetaObject@NmBaseViewScrollArea@@2UQMetaObject@@B @ 10 NONAME ; struct QMetaObject const NmBaseViewScrollArea::staticMetaObject
+	?paint@NmAttachmentListWidget@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 11 NONAME ; void NmAttachmentListWidget::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+	?tr@NmEditorTextEdit@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString NmEditorTextEdit::tr(char const *, char const *, int)
+	?init@NmAttachmentListWidget@@AAEXXZ @ 13 NONAME ; void NmAttachmentListWidget::init(void)
+	?rearrangeLayout@NmAttachmentListWidget@@AAEXXZ @ 14 NONAME ; void NmAttachmentListWidget::rearrangeLayout(void)
+	?trUtf8@NmRecipientLineEdit@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString NmRecipientLineEdit::trUtf8(char const *, char const *)
+	?toHtml@NmHtmlLineEdit@@QBE?AVQString@@XZ @ 16 NONAME ; class QString NmHtmlLineEdit::toHtml(void) const
+	?trUtf8@NmAttachmentListItem@@SA?AVQString@@PBD0@Z @ 17 NONAME ; class QString NmAttachmentListItem::trUtf8(char const *, char const *)
+	?tr@NmAttachmentListItem@@SA?AVQString@@PBD0@Z @ 18 NONAME ; class QString NmAttachmentListItem::tr(char const *, char const *)
+	?metaObject@NmRecipientLineEdit@@UBEPBUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const * NmRecipientLineEdit::metaObject(void) const
+	?metaObject@NmBaseViewScrollArea@@UBEPBUQMetaObject@@XZ @ 20 NONAME ; struct QMetaObject const * NmBaseViewScrollArea::metaObject(void) const
+	?emailAddressList@NmRecipientLineEdit@@QAE?AV?$QList@VNmAddress@@@@XZ @ 21 NONAME ; class QList<class NmAddress> NmRecipientLineEdit::emailAddressList(void)
+	?trUtf8@NmBaseViewScrollArea@@SA?AVQString@@PBD0@Z @ 22 NONAME ; class QString NmBaseViewScrollArea::trUtf8(char const *, char const *)
+	?tr@NmBaseViewScrollArea@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString NmBaseViewScrollArea::tr(char const *, char const *)
+	?getStaticMetaObject@NmAttachmentListItem@@SAABUQMetaObject@@XZ @ 24 NONAME ; struct QMetaObject const & NmAttachmentListItem::getStaticMetaObject(void)
+	?getStaticMetaObject@NmBaseViewScrollArea@@SAABUQMetaObject@@XZ @ 25 NONAME ; struct QMetaObject const & NmBaseViewScrollArea::getStaticMetaObject(void)
+	?getStaticMetaObject@NmAttachmentListWidget@@SAABUQMetaObject@@XZ @ 26 NONAME ; struct QMetaObject const & NmAttachmentListWidget::getStaticMetaObject(void)
+	??_ENmAttachmentListItem@@UAE@I@Z @ 27 NONAME ; NmAttachmentListItem::~NmAttachmentListItem(unsigned int)
+	?setFileSizeText@NmAttachmentListItem@@QAEXABVQString@@@Z @ 28 NONAME ; void NmAttachmentListItem::setFileSizeText(class QString const &)
+	?qt_metacast@NmHtmlLineEdit@@UAEPAXPBD@Z @ 29 NONAME ; void * NmHtmlLineEdit::qt_metacast(char const *)
+	?metaObject@NmEditorTextEdit@@UBEPBUQMetaObject@@XZ @ 30 NONAME ; struct QMetaObject const * NmEditorTextEdit::metaObject(void) const
+	?staticMetaObject@NmHtmlLineEdit@@2UQMetaObject@@B @ 31 NONAME ; struct QMetaObject const NmHtmlLineEdit::staticMetaObject
+	?setFileNameText@NmAttachmentListItem@@QAEXABVQString@@@Z @ 32 NONAME ; void NmAttachmentListItem::setFileNameText(class QString const &)
+	?customTextColor@NmEditorTextEdit@@QBE?AU?$QPair@_NVQColor@@@@XZ @ 33 NONAME ; struct QPair<bool, class QColor> NmEditorTextEdit::customTextColor(void) const
+	?qt_metacast@NmBaseViewScrollArea@@UAEPAXPBD@Z @ 34 NONAME ; void * NmBaseViewScrollArea::qt_metacast(char const *)
+	?inputMethodEvent@NmRecipientLineEdit@@MAEXPAVQInputMethodEvent@@@Z @ 35 NONAME ; void NmRecipientLineEdit::inputMethodEvent(class QInputMethodEvent *)
+	?mouseReleaseEvent@NmBaseViewScrollArea@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 36 NONAME ; void NmBaseViewScrollArea::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+	?tr@NmBaseViewScrollArea@@SA?AVQString@@PBD0H@Z @ 37 NONAME ; class QString NmBaseViewScrollArea::tr(char const *, char const *, int)
+	?qt_metacall@NmAttachmentListWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 38 NONAME ; int NmAttachmentListWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?trUtf8@NmAttachmentListWidget@@SA?AVQString@@PBD0H@Z @ 39 NONAME ; class QString NmAttachmentListWidget::trUtf8(char const *, char const *, int)
+	?constructUi@NmAttachmentListWidget@@AAEXXZ @ 40 NONAME ; void NmAttachmentListWidget::constructUi(void)
+	?qt_metacall@NmRecipientLineEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 41 NONAME ; int NmRecipientLineEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??0NmAttachmentListItem@@QAE@PAVQGraphicsItem@@@Z @ 42 NONAME ; NmAttachmentListItem::NmAttachmentListItem(class QGraphicsItem *)
+	?addSelectedContacts@NmRecipientLineEdit@@QAEXABVQVariant@@@Z @ 43 NONAME ; void NmRecipientLineEdit::addSelectedContacts(class QVariant const &)
+	?toPlainText@NmHtmlLineEdit@@QBE?AVQString@@XZ @ 44 NONAME ; class QString NmHtmlLineEdit::toPlainText(void) const
+	?trUtf8@NmBaseViewScrollArea@@SA?AVQString@@PBD0H@Z @ 45 NONAME ; class QString NmBaseViewScrollArea::trUtf8(char const *, char const *, int)
+	?tr@NmEditorTextEdit@@SA?AVQString@@PBD0@Z @ 46 NONAME ; class QString NmEditorTextEdit::tr(char const *, char const *)
+	?getStaticMetaObject@NmEditorTextEdit@@SAABUQMetaObject@@XZ @ 47 NONAME ; struct QMetaObject const & NmEditorTextEdit::getStaticMetaObject(void)
+	?staticMetaObject@NmAttachmentListItem@@2UQMetaObject@@B @ 48 NONAME ; struct QMetaObject const NmAttachmentListItem::staticMetaObject
+	??1NmHtmlLineEdit@@UAE@XZ @ 49 NONAME ; NmHtmlLineEdit::~NmHtmlLineEdit(void)
+	?setProgressBarValue@NmAttachmentListItem@@QAEXH@Z @ 50 NONAME ; void NmAttachmentListItem::setProgressBarValue(int)
+	?trUtf8@NmHtmlLineEdit@@SA?AVQString@@PBD0@Z @ 51 NONAME ; class QString NmHtmlLineEdit::trUtf8(char const *, char const *)
+	??_ENmBaseViewScrollArea@@UAE@I@Z @ 52 NONAME ; NmBaseViewScrollArea::~NmBaseViewScrollArea(unsigned int)
+	?progressBarValue@NmAttachmentListItem@@QBEHXZ @ 53 NONAME ; int NmAttachmentListItem::progressBarValue(void) const
+	?itemLongPressed@NmAttachmentListItem@@IAEXVQPointF@@@Z @ 54 NONAME ; void NmAttachmentListItem::itemLongPressed(class QPointF)
+	?gestureEvent@NmAttachmentListItem@@MAEXPAVQGestureEvent@@@Z @ 55 NONAME ; void NmAttachmentListItem::gestureEvent(class QGestureEvent *)
+	?setCustomTextColor@NmEditorTextEdit@@QAEX_NABVQColor@@@Z @ 56 NONAME ; void NmEditorTextEdit::setCustomTextColor(bool, class QColor const &)
+	?init@NmAttachmentListItem@@AAEXXZ @ 57 NONAME ; void NmAttachmentListItem::init(void)
+	??0NmRecipientLineEdit@@QAE@PAVQGraphicsItem@@@Z @ 58 NONAME ; NmRecipientLineEdit::NmRecipientLineEdit(class QGraphicsItem *)
+	??0NmHtmlLineEdit@@QAE@PAVQGraphicsItem@@@Z @ 59 NONAME ; NmHtmlLineEdit::NmHtmlLineEdit(class QGraphicsItem *)
+	?tr@NmRecipientLineEdit@@SA?AVQString@@PBD0@Z @ 60 NONAME ; class QString NmRecipientLineEdit::tr(char const *, char const *)
+	?setAttachmentSize@NmAttachmentListWidget@@QAEXHABVQString@@@Z @ 61 NONAME ; void NmAttachmentListWidget::setAttachmentSize(int, class QString const &)
+	?trUtf8@NmEditorTextEdit@@SA?AVQString@@PBD0H@Z @ 62 NONAME ; class QString NmEditorTextEdit::trUtf8(char const *, char const *, int)
+	?setPlainText@NmHtmlLineEdit@@QAEXABVQString@@@Z @ 63 NONAME ; void NmHtmlLineEdit::setPlainText(class QString const &)
+	?longPressGesture@NmBaseViewScrollArea@@MAEXABVQPointF@@@Z @ 64 NONAME ; void NmBaseViewScrollArea::longPressGesture(class QPointF const &)
+	?updateCustomTextColor@NmEditorTextEdit@@QAEXXZ @ 65 NONAME ; void NmEditorTextEdit::updateCustomTextColor(void)
+	?orientationChanged@NmAttachmentListWidget@@AAEXW4Orientation@Qt@@@Z @ 66 NONAME ; void NmAttachmentListWidget::orientationChanged(enum Qt::Orientation)
+	?qt_metacast@NmAttachmentListWidget@@UAEPAXPBD@Z @ 67 NONAME ; void * NmAttachmentListWidget::qt_metacast(char const *)
+	?getStaticMetaObject@NmHtmlLineEdit@@SAABUQMetaObject@@XZ @ 68 NONAME ; struct QMetaObject const & NmHtmlLineEdit::getStaticMetaObject(void)
+	?qt_metacall@NmEditorTextEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 69 NONAME ; int NmEditorTextEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
+	??1NmEditorTextEdit@@UAE@XZ @ 70 NONAME ; NmEditorTextEdit::~NmEditorTextEdit(void)
+	?generateEmailAddressList@NmRecipientLineEdit@@AAEXXZ @ 71 NONAME ; void NmRecipientLineEdit::generateEmailAddressList(void)
+	?trUtf8@NmAttachmentListWidget@@SA?AVQString@@PBD0@Z @ 72 NONAME ; class QString NmAttachmentListWidget::trUtf8(char const *, char const *)
+	??1NmAttachmentListWidget@@UAE@XZ @ 73 NONAME ; NmAttachmentListWidget::~NmAttachmentListWidget(void)
+	??_ENmRecipientLineEdit@@UAE@I@Z @ 74 NONAME ; NmRecipientLineEdit::~NmRecipientLineEdit(unsigned int)
+	?mousePressEvent@NmBaseViewScrollArea@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 75 NONAME ; void NmBaseViewScrollArea::mousePressEvent(class QGraphicsSceneMouseEvent *)
+	?qt_metacast@NmRecipientLineEdit@@UAEPAXPBD@Z @ 76 NONAME ; void * NmRecipientLineEdit::qt_metacast(char const *)
+	?setCustomTextColor@NmEditorTextEdit@@QAEXABU?$QPair@_NVQColor@@@@@Z @ 77 NONAME ; void NmEditorTextEdit::setCustomTextColor(struct QPair<bool, class QColor> const &)
+	?setDocument@NmHtmlLineEdit@@QAEXPAVQTextDocument@@@Z @ 78 NONAME ; void NmHtmlLineEdit::setDocument(class QTextDocument *)
+	?handleItemActivated@NmAttachmentListWidget@@AAEXXZ @ 79 NONAME ; void NmAttachmentListWidget::handleItemActivated(void)
+	?trUtf8@NmEditorTextEdit@@SA?AVQString@@PBD0@Z @ 80 NONAME ; class QString NmEditorTextEdit::trUtf8(char const *, char const *)
+	??0NmBaseViewScrollArea@@QAE@PAVQGraphicsItem@@@Z @ 81 NONAME ; NmBaseViewScrollArea::NmBaseViewScrollArea(class QGraphicsItem *)
+	?metaObject@NmAttachmentListWidget@@UBEPBUQMetaObject@@XZ @ 82 NONAME ; struct QMetaObject const * NmAttachmentListWidget::metaObject(void) const
+	?constructUi@NmAttachmentListItem@@AAEXXZ @ 83 NONAME ; void NmAttachmentListItem::constructUi(void)
+	?longPressed@NmAttachmentListWidget@@IAEXHVQPointF@@@Z @ 84 NONAME ; void NmAttachmentListWidget::longPressed(int, class QPointF)
+	?trUtf8@NmHtmlLineEdit@@SA?AVQString@@PBD0H@Z @ 85 NONAME ; class QString NmHtmlLineEdit::trUtf8(char const *, char const *, int)
+	?staticMetaObject@NmEditorTextEdit@@2UQMetaObject@@B @ 86 NONAME ; struct QMetaObject const NmEditorTextEdit::staticMetaObject
+	??0NmEditorTextEdit@@QAE@PAVQGraphicsItem@@@Z @ 87 NONAME ; NmEditorTextEdit::NmEditorTextEdit(class QGraphicsItem *)
+	?tr@NmHtmlLineEdit@@SA?AVQString@@PBD0H@Z @ 88 NONAME ; class QString NmHtmlLineEdit::tr(char const *, char const *, int)
+	?setHtml@NmHtmlLineEdit@@QAEXABVQString@@@Z @ 89 NONAME ; void NmHtmlLineEdit::setHtml(class QString const &)
+	??_ENmEditorTextEdit@@UAE@I@Z @ 90 NONAME ; NmEditorTextEdit::~NmEditorTextEdit(unsigned int)
+	?tr@NmAttachmentListWidget@@SA?AVQString@@PBD0@Z @ 91 NONAME ; class QString NmAttachmentListWidget::tr(char const *, char const *)
+	?itemActivated@NmAttachmentListItem@@IAEXXZ @ 92 NONAME ; void NmAttachmentListItem::itemActivated(void)
+	?hideProgressBar@NmAttachmentListItem@@QAEXXZ @ 93 NONAME ; void NmAttachmentListItem::hideProgressBar(void)
+	?qt_metacast@NmAttachmentListItem@@UAEPAXPBD@Z @ 94 NONAME ; void * NmAttachmentListItem::qt_metacast(char const *)
+	?getStaticMetaObject@NmRecipientLineEdit@@SAABUQMetaObject@@XZ @ 95 NONAME ; struct QMetaObject const & NmRecipientLineEdit::getStaticMetaObject(void)
+	?findItem@NmAttachmentListWidget@@AAEHPBVQObject@@@Z @ 96 NONAME ; int NmAttachmentListWidget::findItem(class QObject const *)
+	?removeAttachment@NmAttachmentListWidget@@QAEXH@Z @ 97 NONAME ; void NmAttachmentListWidget::removeAttachment(int)
+	??1NmRecipientLineEdit@@UAE@XZ @ 98 NONAME ; NmRecipientLineEdit::~NmRecipientLineEdit(void)
+	?trUtf8@NmRecipientLineEdit@@SA?AVQString@@PBD0H@Z @ 99 NONAME ; class QString NmRecipientLineEdit::trUtf8(char const *, char const *, int)
+	?tr@NmRecipientLineEdit@@SA?AVQString@@PBD0H@Z @ 100 NONAME ; class QString NmRecipientLineEdit::tr(char const *, char const *, int)
+	?progressValue@NmAttachmentListWidget@@QBEHH@Z @ 101 NONAME ; int NmAttachmentListWidget::progressValue(int) const
+	?staticMetaObject@NmAttachmentListWidget@@2UQMetaObject@@B @ 102 NONAME ; struct QMetaObject const NmAttachmentListWidget::staticMetaObject
+	??_ENmAttachmentListWidget@@UAE@I@Z @ 103 NONAME ; NmAttachmentListWidget::~NmAttachmentListWidget(unsigned int)
+	?setTextCursor@NmHtmlLineEdit@@QAEXABVQTextCursor@@@Z @ 104 NONAME ; void NmHtmlLineEdit::setTextCursor(class QTextCursor const &)
+	?setTextColor@NmAttachmentListWidget@@QAEXVQColor@@@Z @ 105 NONAME ; void NmAttachmentListWidget::setTextColor(class QColor)
+	?handleMouseMoveEvent@NmBaseViewScrollArea@@IAEXPAVQGraphicsSceneMouseEvent@@@Z @ 106 NONAME ; void NmBaseViewScrollArea::handleMouseMoveEvent(class QGraphicsSceneMouseEvent *)
+	?staticMetaObject@NmRecipientLineEdit@@2UQMetaObject@@B @ 107 NONAME ; struct QMetaObject const NmRecipientLineEdit::staticMetaObject
+	?setProgressBarValue@NmAttachmentListWidget@@QAEXHH@Z @ 108 NONAME ; void NmAttachmentListWidget::setProgressBarValue(int, int)
+	?handleMouseReleaseEvent@NmBaseViewScrollArea@@IAEXPAVQGraphicsSceneMouseEvent@@@Z @ 109 NONAME ; void NmBaseViewScrollArea::handleMouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+	?insertAttachment@NmAttachmentListWidget@@QAEXHABVQString@@0@Z @ 110 NONAME ; void NmAttachmentListWidget::insertAttachment(int, class QString const &, class QString const &)
+	?metaObject@NmAttachmentListItem@@UBEPBUQMetaObject@@XZ @ 111 NONAME ; struct QMetaObject const * NmAttachmentListItem::metaObject(void) const
+	?removeProgressBar@NmAttachmentListItem@@AAEXXZ @ 112 NONAME ; void NmAttachmentListItem::removeProgressBar(void)
+	??1NmBaseViewScrollArea@@UAE@XZ @ 113 NONAME ; NmBaseViewScrollArea::~NmBaseViewScrollArea(void)
+	?hideProgressBar@NmAttachmentListWidget@@QAEXH@Z @ 114 NONAME ; void NmAttachmentListWidget::hideProgressBar(int)
+	??0NmAttachmentListWidget@@QAE@PAVQGraphicsItem@@@Z @ 115 NONAME ; NmAttachmentListWidget::NmAttachmentListWidget(class QGraphicsItem *)
+	??_ENmHtmlLineEdit@@UAE@I@Z @ 116 NONAME ; NmHtmlLineEdit::~NmHtmlLineEdit(unsigned int)
+	?tr@NmAttachmentListWidget@@SA?AVQString@@PBD0H@Z @ 117 NONAME ; class QString NmAttachmentListWidget::tr(char const *, char const *, int)
+	?handleMousePressEvent@NmBaseViewScrollArea@@IAEXPAVQGraphicsSceneMouseEvent@@@Z @ 118 NONAME ; void NmBaseViewScrollArea::handleMousePressEvent(class QGraphicsSceneMouseEvent *)
+	?insertItemToLayout@NmAttachmentListWidget@@AAEXPAVNmAttachmentListItem@@@Z @ 119 NONAME ; void NmAttachmentListWidget::insertItemToLayout(class NmAttachmentListItem *)
+	?metaObject@NmHtmlLineEdit@@UBEPBUQMetaObject@@XZ @ 120 NONAME ; struct QMetaObject const * NmHtmlLineEdit::metaObject(void) const
+	?setTextColor@NmAttachmentListItem@@QAEXVQColor@@@Z @ 121 NONAME ; void NmAttachmentListItem::setTextColor(class QColor)
+	??1NmAttachmentListItem@@UAE@XZ @ 122 NONAME ; NmAttachmentListItem::~NmAttachmentListItem(void)
+	?rectForPosition@NmEditorTextEdit@@QAE?AVQRectF@@H@Z @ 123 NONAME ; class QRectF NmEditorTextEdit::rectForPosition(int)
+	?count@NmAttachmentListWidget@@QBEHXZ @ 124 NONAME ; int NmAttachmentListWidget::count(void) const
+	?tr@NmAttachmentListItem@@SA?AVQString@@PBD0H@Z @ 125 NONAME ; class QString NmAttachmentListItem::tr(char const *, char const *, int)
+	?handleTextChanged@NmRecipientLineEdit@@AAEXABVQString@@@Z @ 126 NONAME ; void NmRecipientLineEdit::handleTextChanged(class QString const &)
+	?document@NmHtmlLineEdit@@QBEPAVQTextDocument@@XZ @ 127 NONAME ; class QTextDocument * NmHtmlLineEdit::document(void) const
+	?tr@NmHtmlLineEdit@@SA?AVQString@@PBD0@Z @ 128 NONAME ; class QString NmHtmlLineEdit::tr(char const *, char const *)
+	?qt_metacall@NmHtmlLineEdit@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 129 NONAME ; int NmHtmlLineEdit::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@NmBaseViewScrollArea@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 130 NONAME ; int NmBaseViewScrollArea::qt_metacall(enum QMetaObject::Call, int, void * *)
 
--- a/emailuis/nmailuiwidgets/eabi/nmailuiwidgetsu.def	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/eabi/nmailuiwidgetsu.def	Thu Jun 24 14:32:18 2010 +0300
@@ -14,155 +14,149 @@
 	_ZN14NmHtmlLineEditD2Ev @ 13 NONAME
 	_ZN16NmEditorTextEdit11qt_metacallEN11QMetaObject4CallEiPPv @ 14 NONAME
 	_ZN16NmEditorTextEdit11qt_metacastEPKc @ 15 NONAME
-	_ZN16NmEditorTextEdit15setHeaderHeightEi @ 16 NONAME
+	_ZN16NmEditorTextEdit15rectForPositionEi @ 16 NONAME
 	_ZN16NmEditorTextEdit16staticMetaObjectE @ 17 NONAME DATA 16
-	_ZN16NmEditorTextEdit17setScrollPositionEii @ 18 NONAME
-	_ZN16NmEditorTextEdit18setCustomTextColorERK5QPairIb6QColorE @ 19 NONAME
-	_ZN16NmEditorTextEdit18setCustomTextColorEbRK6QColor @ 20 NONAME
-	_ZN16NmEditorTextEdit18updateEditorHeightEv @ 21 NONAME
-	_ZN16NmEditorTextEdit19getStaticMetaObjectEv @ 22 NONAME
-	_ZN16NmEditorTextEdit20updateScrollPositionERK7QPointF @ 23 NONAME
-	_ZN16NmEditorTextEdit21updateCustomTextColorEv @ 24 NONAME
-	_ZN16NmEditorTextEdit26editorContentHeightChangedEv @ 25 NONAME
-	_ZN16NmEditorTextEdit4initEP20NmBaseViewScrollArea @ 26 NONAME
-	_ZN16NmEditorTextEditC1EP13QGraphicsItem @ 27 NONAME
-	_ZN16NmEditorTextEditC2EP13QGraphicsItem @ 28 NONAME
-	_ZN16NmEditorTextEditD0Ev @ 29 NONAME
-	_ZN16NmEditorTextEditD1Ev @ 30 NONAME
-	_ZN16NmEditorTextEditD2Ev @ 31 NONAME
-	_ZN19NmRecipientLineEdit11qt_metacallEN11QMetaObject4CallEiPPv @ 32 NONAME
-	_ZN19NmRecipientLineEdit11qt_metacastEPKc @ 33 NONAME
-	_ZN19NmRecipientLineEdit13keyPressEventEP9QKeyEvent @ 34 NONAME
-	_ZN19NmRecipientLineEdit16emailAddressListEv @ 35 NONAME
-	_ZN19NmRecipientLineEdit16inputMethodEventEP17QInputMethodEvent @ 36 NONAME
-	_ZN19NmRecipientLineEdit16staticMetaObjectE @ 37 NONAME DATA 16
-	_ZN19NmRecipientLineEdit17handleTextChangedERK7QString @ 38 NONAME
-	_ZN19NmRecipientLineEdit19getStaticMetaObjectEv @ 39 NONAME
-	_ZN19NmRecipientLineEdit22insertSelectedContactsERK8QVariant @ 40 NONAME
-	_ZN19NmRecipientLineEdit24generateEmailAddressListEv @ 41 NONAME
-	_ZN19NmRecipientLineEditC1EP13QGraphicsItem @ 42 NONAME
-	_ZN19NmRecipientLineEditC2EP13QGraphicsItem @ 43 NONAME
-	_ZN19NmRecipientLineEditD0Ev @ 44 NONAME
-	_ZN19NmRecipientLineEditD1Ev @ 45 NONAME
-	_ZN19NmRecipientLineEditD2Ev @ 46 NONAME
-	_ZN20NmAttachmentListItem11constructUiEv @ 47 NONAME
-	_ZN20NmAttachmentListItem11qt_metacallEN11QMetaObject4CallEiPPv @ 48 NONAME
-	_ZN20NmAttachmentListItem11qt_metacastEPKc @ 49 NONAME
-	_ZN20NmAttachmentListItem12gestureEventEP13QGestureEvent @ 50 NONAME
-	_ZN20NmAttachmentListItem12setTextColorE6QColor @ 51 NONAME
-	_ZN20NmAttachmentListItem13itemActivatedEv @ 52 NONAME
-	_ZN20NmAttachmentListItem15hideProgressBarEv @ 53 NONAME
-	_ZN20NmAttachmentListItem15itemLongPressedE7QPointF @ 54 NONAME
-	_ZN20NmAttachmentListItem15setFileNameTextERK7QString @ 55 NONAME
-	_ZN20NmAttachmentListItem15setFileSizeTextERK7QString @ 56 NONAME
-	_ZN20NmAttachmentListItem16staticMetaObjectE @ 57 NONAME DATA 16
-	_ZN20NmAttachmentListItem17removeProgressBarEv @ 58 NONAME
-	_ZN20NmAttachmentListItem19getStaticMetaObjectEv @ 59 NONAME
-	_ZN20NmAttachmentListItem19setProgressBarValueEi @ 60 NONAME
-	_ZN20NmAttachmentListItem4initEv @ 61 NONAME
-	_ZN20NmAttachmentListItemC1EP13QGraphicsItem @ 62 NONAME
-	_ZN20NmAttachmentListItemC2EP13QGraphicsItem @ 63 NONAME
-	_ZN20NmAttachmentListItemD0Ev @ 64 NONAME
-	_ZN20NmAttachmentListItemD1Ev @ 65 NONAME
-	_ZN20NmAttachmentListItemD2Ev @ 66 NONAME
-	_ZN20NmBaseViewScrollArea11qt_metacallEN11QMetaObject4CallEiPPv @ 67 NONAME
-	_ZN20NmBaseViewScrollArea11qt_metacastEPKc @ 68 NONAME
-	_ZN20NmBaseViewScrollArea14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 69 NONAME
-	_ZN20NmBaseViewScrollArea15mousePressEventEP24QGraphicsSceneMouseEvent @ 70 NONAME
-	_ZN20NmBaseViewScrollArea16longPressGestureERK7QPointF @ 71 NONAME
-	_ZN20NmBaseViewScrollArea16staticMetaObjectE @ 72 NONAME DATA 16
-	_ZN20NmBaseViewScrollArea17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 73 NONAME
-	_ZN20NmBaseViewScrollArea19getStaticMetaObjectEv @ 74 NONAME
-	_ZN20NmBaseViewScrollArea20handleMouseMoveEventEP24QGraphicsSceneMouseEvent @ 75 NONAME
-	_ZN20NmBaseViewScrollArea21handleMousePressEventEP24QGraphicsSceneMouseEvent @ 76 NONAME
-	_ZN20NmBaseViewScrollArea22handleLongPressGestureERK7QPointF @ 77 NONAME
-	_ZN20NmBaseViewScrollArea23handleMouseReleaseEventEP24QGraphicsSceneMouseEvent @ 78 NONAME
-	_ZN20NmBaseViewScrollAreaC1EP13QGraphicsItem @ 79 NONAME
-	_ZN20NmBaseViewScrollAreaC2EP13QGraphicsItem @ 80 NONAME
-	_ZN20NmBaseViewScrollAreaD0Ev @ 81 NONAME
-	_ZN20NmBaseViewScrollAreaD1Ev @ 82 NONAME
-	_ZN20NmBaseViewScrollAreaD2Ev @ 83 NONAME
-	_ZN22NmAttachmentListWidget11constructUiEv @ 84 NONAME
-	_ZN22NmAttachmentListWidget11longPressedEi7QPointF @ 85 NONAME
-	_ZN22NmAttachmentListWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 86 NONAME
-	_ZN22NmAttachmentListWidget11qt_metacastEPKc @ 87 NONAME
-	_ZN22NmAttachmentListWidget12setTextColorE6QColor @ 88 NONAME
-	_ZN22NmAttachmentListWidget13itemActivatedEi @ 89 NONAME
-	_ZN22NmAttachmentListWidget15hideProgressBarEi @ 90 NONAME
-	_ZN22NmAttachmentListWidget15rearrangeLayoutEv @ 91 NONAME
-	_ZN22NmAttachmentListWidget16insertAttachmentEiRK7QStringS2_ @ 92 NONAME
-	_ZN22NmAttachmentListWidget16removeAttachmentEi @ 93 NONAME
-	_ZN22NmAttachmentListWidget16staticMetaObjectE @ 94 NONAME DATA 16
-	_ZN22NmAttachmentListWidget17handleLongPressedE7QPointF @ 95 NONAME
-	_ZN22NmAttachmentListWidget17setAttachmentSizeEiRK7QString @ 96 NONAME
-	_ZN22NmAttachmentListWidget18insertItemToLayoutEP20NmAttachmentListItem @ 97 NONAME
-	_ZN22NmAttachmentListWidget18orientationChangedEN2Qt11OrientationE @ 98 NONAME
-	_ZN22NmAttachmentListWidget19getStaticMetaObjectEv @ 99 NONAME
-	_ZN22NmAttachmentListWidget19handleItemActivatedEv @ 100 NONAME
-	_ZN22NmAttachmentListWidget19setProgressBarValueEii @ 101 NONAME
-	_ZN22NmAttachmentListWidget4initEv @ 102 NONAME
-	_ZN22NmAttachmentListWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 103 NONAME
-	_ZN22NmAttachmentListWidget8findItemEPK7QObject @ 104 NONAME
-	_ZN22NmAttachmentListWidgetC1EP13QGraphicsItem @ 105 NONAME
-	_ZN22NmAttachmentListWidgetC2EP13QGraphicsItem @ 106 NONAME
-	_ZN22NmAttachmentListWidgetD0Ev @ 107 NONAME
-	_ZN22NmAttachmentListWidgetD1Ev @ 108 NONAME
-	_ZN22NmAttachmentListWidgetD2Ev @ 109 NONAME
-	_ZNK14NmHtmlLineEdit10metaObjectEv @ 110 NONAME
-	_ZNK14NmHtmlLineEdit10textCursorEv @ 111 NONAME
-	_ZNK14NmHtmlLineEdit11toPlainTextEv @ 112 NONAME
-	_ZNK14NmHtmlLineEdit6toHtmlEv @ 113 NONAME
-	_ZNK14NmHtmlLineEdit8documentEv @ 114 NONAME
-	_ZNK16NmEditorTextEdit10metaObjectEv @ 115 NONAME
-	_ZNK16NmEditorTextEdit13contentHeightEv @ 116 NONAME
-	_ZNK16NmEditorTextEdit15customTextColorEv @ 117 NONAME
-	_ZNK19NmRecipientLineEdit10metaObjectEv @ 118 NONAME
-	_ZNK20NmAttachmentListItem10metaObjectEv @ 119 NONAME
-	_ZNK20NmAttachmentListItem16progressBarValueEv @ 120 NONAME
-	_ZNK20NmBaseViewScrollArea10metaObjectEv @ 121 NONAME
-	_ZNK22NmAttachmentListWidget10metaObjectEv @ 122 NONAME
-	_ZNK22NmAttachmentListWidget13progressValueEi @ 123 NONAME
-	_ZNK22NmAttachmentListWidget5countEv @ 124 NONAME
-	_ZTI14NmHtmlLineEdit @ 125 NONAME
-	_ZTI16NmEditorTextEdit @ 126 NONAME
-	_ZTI19NmRecipientLineEdit @ 127 NONAME
-	_ZTI20NmAttachmentListItem @ 128 NONAME
-	_ZTI20NmBaseViewScrollArea @ 129 NONAME
-	_ZTI22NmAttachmentListWidget @ 130 NONAME
-	_ZTV14NmHtmlLineEdit @ 131 NONAME
-	_ZTV16NmEditorTextEdit @ 132 NONAME
-	_ZTV19NmRecipientLineEdit @ 133 NONAME
-	_ZTV20NmAttachmentListItem @ 134 NONAME
-	_ZTV20NmBaseViewScrollArea @ 135 NONAME
-	_ZTV22NmAttachmentListWidget @ 136 NONAME
-	_ZThn16_N14NmHtmlLineEditD0Ev @ 137 NONAME
-	_ZThn16_N14NmHtmlLineEditD1Ev @ 138 NONAME
-	_ZThn16_N16NmEditorTextEditD0Ev @ 139 NONAME
-	_ZThn16_N16NmEditorTextEditD1Ev @ 140 NONAME
-	_ZThn16_N19NmRecipientLineEditD0Ev @ 141 NONAME
-	_ZThn16_N19NmRecipientLineEditD1Ev @ 142 NONAME
-	_ZThn16_N20NmAttachmentListItemD0Ev @ 143 NONAME
-	_ZThn16_N20NmAttachmentListItemD1Ev @ 144 NONAME
-	_ZThn16_N20NmBaseViewScrollAreaD0Ev @ 145 NONAME
-	_ZThn16_N20NmBaseViewScrollAreaD1Ev @ 146 NONAME
-	_ZThn16_N22NmAttachmentListWidgetD0Ev @ 147 NONAME
-	_ZThn16_N22NmAttachmentListWidgetD1Ev @ 148 NONAME
-	_ZThn8_N14NmHtmlLineEditD0Ev @ 149 NONAME
-	_ZThn8_N14NmHtmlLineEditD1Ev @ 150 NONAME
-	_ZThn8_N16NmEditorTextEditD0Ev @ 151 NONAME
-	_ZThn8_N16NmEditorTextEditD1Ev @ 152 NONAME
-	_ZThn8_N19NmRecipientLineEdit13keyPressEventEP9QKeyEvent @ 153 NONAME
-	_ZThn8_N19NmRecipientLineEdit16inputMethodEventEP17QInputMethodEvent @ 154 NONAME
-	_ZThn8_N19NmRecipientLineEditD0Ev @ 155 NONAME
-	_ZThn8_N19NmRecipientLineEditD1Ev @ 156 NONAME
-	_ZThn8_N20NmAttachmentListItemD0Ev @ 157 NONAME
-	_ZThn8_N20NmAttachmentListItemD1Ev @ 158 NONAME
-	_ZThn8_N20NmBaseViewScrollArea14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 159 NONAME
-	_ZThn8_N20NmBaseViewScrollArea15mousePressEventEP24QGraphicsSceneMouseEvent @ 160 NONAME
-	_ZThn8_N20NmBaseViewScrollArea17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 161 NONAME
-	_ZThn8_N20NmBaseViewScrollAreaD0Ev @ 162 NONAME
-	_ZThn8_N20NmBaseViewScrollAreaD1Ev @ 163 NONAME
-	_ZThn8_N22NmAttachmentListWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 164 NONAME
-	_ZThn8_N22NmAttachmentListWidgetD0Ev @ 165 NONAME
-	_ZThn8_N22NmAttachmentListWidgetD1Ev @ 166 NONAME
+	_ZN16NmEditorTextEdit18setCustomTextColorERK5QPairIb6QColorE @ 18 NONAME
+	_ZN16NmEditorTextEdit18setCustomTextColorEbRK6QColor @ 19 NONAME
+	_ZN16NmEditorTextEdit19getStaticMetaObjectEv @ 20 NONAME
+	_ZN16NmEditorTextEdit21updateCustomTextColorEv @ 21 NONAME
+	_ZN16NmEditorTextEditC1EP13QGraphicsItem @ 22 NONAME
+	_ZN16NmEditorTextEditC2EP13QGraphicsItem @ 23 NONAME
+	_ZN16NmEditorTextEditD0Ev @ 24 NONAME
+	_ZN16NmEditorTextEditD1Ev @ 25 NONAME
+	_ZN16NmEditorTextEditD2Ev @ 26 NONAME
+	_ZN19NmRecipientLineEdit11qt_metacallEN11QMetaObject4CallEiPPv @ 27 NONAME
+	_ZN19NmRecipientLineEdit11qt_metacastEPKc @ 28 NONAME
+	_ZN19NmRecipientLineEdit13keyPressEventEP9QKeyEvent @ 29 NONAME
+	_ZN19NmRecipientLineEdit16emailAddressListEv @ 30 NONAME
+	_ZN19NmRecipientLineEdit16inputMethodEventEP17QInputMethodEvent @ 31 NONAME
+	_ZN19NmRecipientLineEdit16staticMetaObjectE @ 32 NONAME DATA 16
+	_ZN19NmRecipientLineEdit17handleTextChangedERK7QString @ 33 NONAME
+	_ZN19NmRecipientLineEdit19addSelectedContactsERK8QVariant @ 34 NONAME
+	_ZN19NmRecipientLineEdit19getStaticMetaObjectEv @ 35 NONAME
+	_ZN19NmRecipientLineEdit24generateEmailAddressListEv @ 36 NONAME
+	_ZN19NmRecipientLineEditC1EP13QGraphicsItem @ 37 NONAME
+	_ZN19NmRecipientLineEditC2EP13QGraphicsItem @ 38 NONAME
+	_ZN19NmRecipientLineEditD0Ev @ 39 NONAME
+	_ZN19NmRecipientLineEditD1Ev @ 40 NONAME
+	_ZN19NmRecipientLineEditD2Ev @ 41 NONAME
+	_ZN20NmAttachmentListItem11constructUiEv @ 42 NONAME
+	_ZN20NmAttachmentListItem11qt_metacallEN11QMetaObject4CallEiPPv @ 43 NONAME
+	_ZN20NmAttachmentListItem11qt_metacastEPKc @ 44 NONAME
+	_ZN20NmAttachmentListItem12gestureEventEP13QGestureEvent @ 45 NONAME
+	_ZN20NmAttachmentListItem12setTextColorE6QColor @ 46 NONAME
+	_ZN20NmAttachmentListItem13itemActivatedEv @ 47 NONAME
+	_ZN20NmAttachmentListItem15hideProgressBarEv @ 48 NONAME
+	_ZN20NmAttachmentListItem15itemLongPressedE7QPointF @ 49 NONAME
+	_ZN20NmAttachmentListItem15setFileNameTextERK7QString @ 50 NONAME
+	_ZN20NmAttachmentListItem15setFileSizeTextERK7QString @ 51 NONAME
+	_ZN20NmAttachmentListItem16staticMetaObjectE @ 52 NONAME DATA 16
+	_ZN20NmAttachmentListItem17removeProgressBarEv @ 53 NONAME
+	_ZN20NmAttachmentListItem19getStaticMetaObjectEv @ 54 NONAME
+	_ZN20NmAttachmentListItem19setProgressBarValueEi @ 55 NONAME
+	_ZN20NmAttachmentListItem4initEv @ 56 NONAME
+	_ZN20NmAttachmentListItemC1EP13QGraphicsItem @ 57 NONAME
+	_ZN20NmAttachmentListItemC2EP13QGraphicsItem @ 58 NONAME
+	_ZN20NmAttachmentListItemD0Ev @ 59 NONAME
+	_ZN20NmAttachmentListItemD1Ev @ 60 NONAME
+	_ZN20NmAttachmentListItemD2Ev @ 61 NONAME
+	_ZN20NmBaseViewScrollArea11qt_metacallEN11QMetaObject4CallEiPPv @ 62 NONAME
+	_ZN20NmBaseViewScrollArea11qt_metacastEPKc @ 63 NONAME
+	_ZN20NmBaseViewScrollArea14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 64 NONAME
+	_ZN20NmBaseViewScrollArea15mousePressEventEP24QGraphicsSceneMouseEvent @ 65 NONAME
+	_ZN20NmBaseViewScrollArea16longPressGestureERK7QPointF @ 66 NONAME
+	_ZN20NmBaseViewScrollArea16staticMetaObjectE @ 67 NONAME DATA 16
+	_ZN20NmBaseViewScrollArea17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 68 NONAME
+	_ZN20NmBaseViewScrollArea19getStaticMetaObjectEv @ 69 NONAME
+	_ZN20NmBaseViewScrollArea20handleMouseMoveEventEP24QGraphicsSceneMouseEvent @ 70 NONAME
+	_ZN20NmBaseViewScrollArea21handleMousePressEventEP24QGraphicsSceneMouseEvent @ 71 NONAME
+	_ZN20NmBaseViewScrollArea22handleLongPressGestureERK7QPointF @ 72 NONAME
+	_ZN20NmBaseViewScrollArea23handleMouseReleaseEventEP24QGraphicsSceneMouseEvent @ 73 NONAME
+	_ZN20NmBaseViewScrollAreaC1EP13QGraphicsItem @ 74 NONAME
+	_ZN20NmBaseViewScrollAreaC2EP13QGraphicsItem @ 75 NONAME
+	_ZN20NmBaseViewScrollAreaD0Ev @ 76 NONAME
+	_ZN20NmBaseViewScrollAreaD1Ev @ 77 NONAME
+	_ZN20NmBaseViewScrollAreaD2Ev @ 78 NONAME
+	_ZN22NmAttachmentListWidget11constructUiEv @ 79 NONAME
+	_ZN22NmAttachmentListWidget11longPressedEi7QPointF @ 80 NONAME
+	_ZN22NmAttachmentListWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 81 NONAME
+	_ZN22NmAttachmentListWidget11qt_metacastEPKc @ 82 NONAME
+	_ZN22NmAttachmentListWidget12setTextColorE6QColor @ 83 NONAME
+	_ZN22NmAttachmentListWidget13itemActivatedEi @ 84 NONAME
+	_ZN22NmAttachmentListWidget15hideProgressBarEi @ 85 NONAME
+	_ZN22NmAttachmentListWidget15rearrangeLayoutEv @ 86 NONAME
+	_ZN22NmAttachmentListWidget16insertAttachmentEiRK7QStringS2_ @ 87 NONAME
+	_ZN22NmAttachmentListWidget16removeAttachmentEi @ 88 NONAME
+	_ZN22NmAttachmentListWidget16staticMetaObjectE @ 89 NONAME DATA 16
+	_ZN22NmAttachmentListWidget17handleLongPressedE7QPointF @ 90 NONAME
+	_ZN22NmAttachmentListWidget17setAttachmentSizeEiRK7QString @ 91 NONAME
+	_ZN22NmAttachmentListWidget18insertItemToLayoutEP20NmAttachmentListItem @ 92 NONAME
+	_ZN22NmAttachmentListWidget18orientationChangedEN2Qt11OrientationE @ 93 NONAME
+	_ZN22NmAttachmentListWidget19getStaticMetaObjectEv @ 94 NONAME
+	_ZN22NmAttachmentListWidget19handleItemActivatedEv @ 95 NONAME
+	_ZN22NmAttachmentListWidget19setProgressBarValueEii @ 96 NONAME
+	_ZN22NmAttachmentListWidget4initEv @ 97 NONAME
+	_ZN22NmAttachmentListWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 98 NONAME
+	_ZN22NmAttachmentListWidget8findItemEPK7QObject @ 99 NONAME
+	_ZN22NmAttachmentListWidgetC1EP13QGraphicsItem @ 100 NONAME
+	_ZN22NmAttachmentListWidgetC2EP13QGraphicsItem @ 101 NONAME
+	_ZN22NmAttachmentListWidgetD0Ev @ 102 NONAME
+	_ZN22NmAttachmentListWidgetD1Ev @ 103 NONAME
+	_ZN22NmAttachmentListWidgetD2Ev @ 104 NONAME
+	_ZNK14NmHtmlLineEdit10metaObjectEv @ 105 NONAME
+	_ZNK14NmHtmlLineEdit10textCursorEv @ 106 NONAME
+	_ZNK14NmHtmlLineEdit11toPlainTextEv @ 107 NONAME
+	_ZNK14NmHtmlLineEdit6toHtmlEv @ 108 NONAME
+	_ZNK14NmHtmlLineEdit8documentEv @ 109 NONAME
+	_ZNK16NmEditorTextEdit10metaObjectEv @ 110 NONAME
+	_ZNK16NmEditorTextEdit15customTextColorEv @ 111 NONAME
+	_ZNK19NmRecipientLineEdit10metaObjectEv @ 112 NONAME
+	_ZNK20NmAttachmentListItem10metaObjectEv @ 113 NONAME
+	_ZNK20NmAttachmentListItem16progressBarValueEv @ 114 NONAME
+	_ZNK20NmBaseViewScrollArea10metaObjectEv @ 115 NONAME
+	_ZNK22NmAttachmentListWidget10metaObjectEv @ 116 NONAME
+	_ZNK22NmAttachmentListWidget13progressValueEi @ 117 NONAME
+	_ZNK22NmAttachmentListWidget5countEv @ 118 NONAME
+	_ZTI14NmHtmlLineEdit @ 119 NONAME
+	_ZTI16NmEditorTextEdit @ 120 NONAME
+	_ZTI19NmRecipientLineEdit @ 121 NONAME
+	_ZTI20NmAttachmentListItem @ 122 NONAME
+	_ZTI20NmBaseViewScrollArea @ 123 NONAME
+	_ZTI22NmAttachmentListWidget @ 124 NONAME
+	_ZTV14NmHtmlLineEdit @ 125 NONAME
+	_ZTV16NmEditorTextEdit @ 126 NONAME
+	_ZTV19NmRecipientLineEdit @ 127 NONAME
+	_ZTV20NmAttachmentListItem @ 128 NONAME
+	_ZTV20NmBaseViewScrollArea @ 129 NONAME
+	_ZTV22NmAttachmentListWidget @ 130 NONAME
+	_ZThn16_N14NmHtmlLineEditD0Ev @ 131 NONAME
+	_ZThn16_N14NmHtmlLineEditD1Ev @ 132 NONAME
+	_ZThn16_N16NmEditorTextEditD0Ev @ 133 NONAME
+	_ZThn16_N16NmEditorTextEditD1Ev @ 134 NONAME
+	_ZThn16_N19NmRecipientLineEditD0Ev @ 135 NONAME
+	_ZThn16_N19NmRecipientLineEditD1Ev @ 136 NONAME
+	_ZThn16_N20NmAttachmentListItemD0Ev @ 137 NONAME
+	_ZThn16_N20NmAttachmentListItemD1Ev @ 138 NONAME
+	_ZThn16_N20NmBaseViewScrollAreaD0Ev @ 139 NONAME
+	_ZThn16_N20NmBaseViewScrollAreaD1Ev @ 140 NONAME
+	_ZThn16_N22NmAttachmentListWidgetD0Ev @ 141 NONAME
+	_ZThn16_N22NmAttachmentListWidgetD1Ev @ 142 NONAME
+	_ZThn8_N14NmHtmlLineEditD0Ev @ 143 NONAME
+	_ZThn8_N14NmHtmlLineEditD1Ev @ 144 NONAME
+	_ZThn8_N16NmEditorTextEditD0Ev @ 145 NONAME
+	_ZThn8_N16NmEditorTextEditD1Ev @ 146 NONAME
+	_ZThn8_N19NmRecipientLineEdit13keyPressEventEP9QKeyEvent @ 147 NONAME
+	_ZThn8_N19NmRecipientLineEdit16inputMethodEventEP17QInputMethodEvent @ 148 NONAME
+	_ZThn8_N19NmRecipientLineEditD0Ev @ 149 NONAME
+	_ZThn8_N19NmRecipientLineEditD1Ev @ 150 NONAME
+	_ZThn8_N20NmAttachmentListItemD0Ev @ 151 NONAME
+	_ZThn8_N20NmAttachmentListItemD1Ev @ 152 NONAME
+	_ZThn8_N20NmBaseViewScrollArea14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 153 NONAME
+	_ZThn8_N20NmBaseViewScrollArea15mousePressEventEP24QGraphicsSceneMouseEvent @ 154 NONAME
+	_ZThn8_N20NmBaseViewScrollArea17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 155 NONAME
+	_ZThn8_N20NmBaseViewScrollAreaD0Ev @ 156 NONAME
+	_ZThn8_N20NmBaseViewScrollAreaD1Ev @ 157 NONAME
+	_ZThn8_N22NmAttachmentListWidget5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 158 NONAME
+	_ZThn8_N22NmAttachmentListWidgetD0Ev @ 159 NONAME
+	_ZThn8_N22NmAttachmentListWidgetD1Ev @ 160 NONAME
 
--- a/emailuis/nmailuiwidgets/inc/nmeditortextedit.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/inc/nmeditortextedit.h	Thu Jun 24 14:32:18 2010 +0300
@@ -21,10 +21,6 @@
 #include <hbtextedit.h>
 #include "nmailuiwidgetsdef.h"
 
-class NmBaseViewScrollArea;
-class HbScrollArea;
-
-
 class NMAILUIWIDGETS_EXPORT NmEditorTextEdit : public HbTextEdit
 {
 Q_OBJECT
@@ -33,32 +29,16 @@
     NmEditorTextEdit(QGraphicsItem *parent = 0);
     virtual ~NmEditorTextEdit();
 
-    void init(NmBaseViewScrollArea *bgScrollArea);
-    qreal contentHeight() const;
-
     void setCustomTextColor(const QPair<bool, QColor> &customColor);
     void setCustomTextColor(bool useCustom, const QColor& color = Qt::black);
     QPair<bool, QColor> customTextColor() const;
 
-signals:
-    void editorContentHeightChanged();
+    QRectF rectForPosition(int position);
 
 public slots:
-    void updateEditorHeight();
-    void setHeaderHeight(int);
-    void setScrollPosition(int oldPos, int newPos);
-    void updateScrollPosition(const QPointF &newPosition);
     void updateCustomTextColor();
 
 private:
-    HbScrollArea *mScrollArea;
-    NmBaseViewScrollArea *mBackgroundScrollArea;
-    qreal mPreviousContentsHeight;
-    int mHeaderHeight;
-    QPointF mBgScrollPosition;
-    bool mFirstTime;
-    bool mFirstTimeToScrollPosUpdate;
-    
     QPair<bool, QColor> mCustomTextColor;//!<This property keeps info about using customTextColor and color to use. 
 };
 
--- a/emailuis/nmailuiwidgets/inc/nmrecipientlineedit.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/inc/nmrecipientlineedit.h	Thu Jun 24 14:32:18 2010 +0300
@@ -38,7 +38,7 @@
 	
 public slots:
 #ifdef Q_OS_SYMBIAN
-    void insertSelectedContacts(const QVariant &selectedContacts);
+    void addSelectedContacts(const QVariant &selectedContacts);
 #endif
 
 protected:	// from HbLineEdit
--- a/emailuis/nmailuiwidgets/nmailuiwidgets.qrc	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/nmailuiwidgets.qrc	Thu Jun 24 14:32:18 2010 +0300
@@ -3,5 +3,7 @@
         <file alias="nmattachmentlistwidget.docml" >resources/nmattachmentlistwidget.docml</file>
         <file alias="nmattachmentlistitem.widgetml" >resources/nmattachmentlistitem.widgetml</file>
         <file alias="nmattachmentlistitem.css" >resources/nmattachmentlistitem.css</file>
+        <file alias="nmeditortextedit.css" >resources/nmeditortextedit.css</file>
+        <file alias="nmeditortextedit.widgetml" >resources/nmeditortextedit.widgetml</file>
     </qresource>
 </RCC>
--- a/emailuis/nmailuiwidgets/src/nmattachmentlistwidget.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/src/nmattachmentlistwidget.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -119,7 +119,10 @@
 {
     NM_FUNCTION;
     
+    qDeleteAll(mItemList);
+
     mItemList.clear();
+	
 }
 
 /*!
@@ -257,6 +260,8 @@
     Q_UNUSED(option);
     Q_UNUSED(widget);
     if (painter&&mLayout){
+        painter->save();
+        
         // Use text color as a line color if set, otherwise use theme
         // normal list content color.
         if (mTextColor.isValid()){
@@ -280,7 +285,8 @@
                               layoutRect.bottomRight().x(), itemRect.bottomRight().y());
                 painter->drawLine(line1);                     
             }     
-        }        
+        }
+        painter->restore();
     }
 }
 
@@ -318,8 +324,9 @@
     //construct UI after orientation has been figured out
     constructUi();
 
-    //set default values, needed?
-    setFlag(QGraphicsItem::ItemIsFocusable);      
+    //set flags
+    setFlag(QGraphicsItem::ItemIsFocusable);  
+    setFlag(QGraphicsItem::ItemHasNoContents,false);
 }
 
 /*!
--- a/emailuis/nmailuiwidgets/src/nmeditortextedit.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/src/nmeditortextedit.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -17,23 +17,36 @@
 
 #include "nmailuiwidgetsheaders.h"
 
-// Following constants will be removed later when possible
-static const double Un = 6.66;
-static const double BodyMargin = Un;
-static const int ChromeHeight = 160;
-static const double FieldHeightWhenSecondaryFont = 7.46 * Un;
-static const int GroupBoxTitleHeight = 42;
-static const double HeightOfTheHeaderOnStartup =
-    2 * FieldHeightWhenSecondaryFont + GroupBoxTitleHeight;
+static const QString FILE_PATH_CSS = ":nmeditortextedit.css";
+static const QString FILE_PATH_WIDGETML = ":nmeditortextedit.widgetml";
 
 /*!
     Constructor
 */
 NmEditorTextEdit::NmEditorTextEdit(QGraphicsItem *parent) :
-    HbTextEdit(parent),
-    mFirstTimeToScrollPosUpdate(true)
+    HbTextEdit(parent)
 {
     NM_FUNCTION;
+    
+    HbStyleLoader::registerFilePath(FILE_PATH_WIDGETML);
+    HbStyleLoader::registerFilePath(FILE_PATH_CSS);
+
+    mCustomTextColor = QPair<bool, QColor>(false, Qt::black);
+    
+    // Enable scrolling using cursor
+    setScrollable(true);
+    scrollArea()->setScrollDirections(Qt::Horizontal);
+
+    // set background colour to plain white
+    QPixmap whitePixmap(10,10);
+    whitePixmap.fill(Qt::white);
+    QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem (whitePixmap);
+    setBackgroundItem(pixmapItem); 
+    
+    // disables highlight frame for now - new api to set the frame item should be release somewhere wk26
+    setFocusHighlight(HbStyle::P_TextEdit_frame_highlight, HbWidget::FocusHighlightNone);
+    
+    connect(this, SIGNAL(contentsChanged()), this, SLOT(updateCustomTextColor()));
 }
 
 /*!
@@ -42,132 +55,9 @@
 NmEditorTextEdit::~NmEditorTextEdit()
 {
     NM_FUNCTION;
-}
-
-void NmEditorTextEdit::init(NmBaseViewScrollArea *bgScrollArea)
-{
-    NM_FUNCTION;
     
-    mPreviousContentsHeight = 0;
-    mFirstTime = true;
-    mCustomTextColor = QPair<bool, QColor>(false,Qt::black);
-    mBackgroundScrollArea = bgScrollArea;
-    mHeaderHeight = (int)HeightOfTheHeaderOnStartup;
-    mBgScrollPosition.setX(0);
-    mBgScrollPosition.setY(0);
-    document()->setDocumentMargin(BodyMargin);
-
-    mScrollArea = this->scrollArea();
-
-    // Enable scrolling using cursor
-    setScrollable(true);
-    mScrollArea->setScrollDirections(Qt::Horizontal);
-
-    connect(this, SIGNAL(contentsChanged()), this, SLOT(updateEditorHeight()));
-    connect(this, SIGNAL(cursorPositionChanged(int, int)),
-            this, SLOT(setScrollPosition(int, int)));
-    connect(this, SIGNAL(contentsChanged()), this, SLOT(updateCustomTextColor()));
-}
-
-/*!
-    This function returns the height (pixels) of the body fields document content.
- */
-qreal NmEditorTextEdit::contentHeight() const
-{
-    NM_FUNCTION;
-    
-    QSizeF s = document()->size();
-    return s.height();
-}
-
-/*!
-   This slot updates the editor height. It is called every time when text edit
-   widget content has been changed.
- */
-void NmEditorTextEdit::updateEditorHeight()
-{
-    NM_FUNCTION;
-    
-    // Get current body content height
-    qreal heightOfTheTextEdit = contentHeight();
-
-    // Check if height is changed
-    if (mPreviousContentsHeight != heightOfTheTextEdit) {
-        mPreviousContentsHeight = heightOfTheTextEdit;
-        setPreferredHeight(heightOfTheTextEdit);
-        setMaximumHeight(heightOfTheTextEdit);
-    }
-    // Inform parent that content height has been changed
-    emit editorContentHeightChanged();
-}
-
-/*!
-    This slot is called when cursor position is changed in body area using
-    'pointing stick' or keyboard. Function will update the scroll position
-    of the content so that cursor does not go outside of the screen or
-    behind the virtual keyboard.
- */
-void NmEditorTextEdit::setScrollPosition(int oldPos, int newPos)
-{
-    NM_FUNCTION;
-    
-    Q_UNUSED(oldPos);
-
-    if (mFirstTime) {
-        // For some reason content height of the HbTextEdit is wrong
-        // right after construction. That is the reason why this mFirstTime
-        // member is used to set content height bit later.
-        mFirstTime = false;
-        updateEditorHeight();
-    }
-    const QSizeF screenReso = HbDeviceProfile::current().logicalSize();
-    qreal maxHeight = screenReso.height() - ChromeHeight;
-
-    // Get cursor position coordinates
-    QRectF cursorPosPix = rectForPosition(newPos);
-
-    // Calculate the screen top and bottom boundaries, this means the part of the
-    // background scroll area which is currently visible.
-    qreal visibleRectTopBoundary;
-    qreal visibleRectBottomBoundary;
-
-    if (mBgScrollPosition.y() < mHeaderHeight) {
-        // Header is completely or partially visible
-        visibleRectTopBoundary = mHeaderHeight - mBgScrollPosition.y();
-        visibleRectBottomBoundary = maxHeight - visibleRectTopBoundary;
-    }
-    else {
-        // Header is not visible
-        visibleRectTopBoundary = mBgScrollPosition.y() - mHeaderHeight;
-        visibleRectBottomBoundary = visibleRectTopBoundary + maxHeight;
-    }
-
-    // Do scrolling if cursor is out of the screen boundaries
-    if (cursorPosPix.y() > visibleRectBottomBoundary) {
-        // Do scroll forward
-        mBackgroundScrollArea->scrollContentsTo(
-            QPointF(0,cursorPosPix.y() - maxHeight + mHeaderHeight));
-    }
-    else if (cursorPosPix.y() + mHeaderHeight < mBgScrollPosition.y()) {
-        // Do scroll backward
-        mBackgroundScrollArea->scrollContentsTo(QPointF(0,cursorPosPix.y() + mHeaderHeight));
-    }
-}
-
-/*!
-    This slot is called when background scroll areas scroll position has been shanged.
-*/
-void NmEditorTextEdit::updateScrollPosition(const QPointF &newPosition)
-{
-    NM_FUNCTION;
-    
-    // Temporary fix: When this is called for the first time, the editor is scrolled down for 
-    // some reason so this will restore the scroll position.
-    if(mFirstTimeToScrollPosUpdate) {
-        mFirstTimeToScrollPosUpdate = false;
-        mBackgroundScrollArea->scrollContentsTo(QPointF(0,0));        
-    }
-    mBgScrollPosition = newPosition;
+    HbStyleLoader::unregisterFilePath(FILE_PATH_WIDGETML);
+    HbStyleLoader::unregisterFilePath(FILE_PATH_CSS);    
 }
 
 /*!
@@ -193,7 +83,8 @@
                     tcursor.mergeCharFormat(fmt);
                 }
             }
-        } else {
+        }
+        else {
             fmt = tcursor.charFormat();
             fmt.setForeground(mCustomTextColor.second);
             tcursor.mergeCharFormat(fmt);
@@ -203,18 +94,6 @@
 }
 
 /*!
-    This slot is called when header widget height has been changed. Function performs
-    the repositioning of the body field and resizing of the editor and content area.
- */
-void NmEditorTextEdit::setHeaderHeight(int newHeight)
-{
-    NM_FUNCTION;
-    
-    mHeaderHeight = newHeight;
-    updateEditorHeight();
-}
-
-/*!
    Sets flag is custom text color should be used and sets the custom color.
    
    Function does not affect the color of existing content, only text that will be entered later.
@@ -254,3 +133,12 @@
     
     return mCustomTextColor;
 }
+
+/*!
+ *  Returns the calculated rect in item coordinates of the editor for the the given \a position inside a document.
+ */
+QRectF NmEditorTextEdit::rectForPosition(int position)
+{
+    return HbTextEdit::rectForPosition(position);
+}
+
--- a/emailuis/nmailuiwidgets/src/nmrecipientlineedit.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmailuiwidgets/src/nmrecipientlineedit.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -65,29 +65,43 @@
 
 #ifdef Q_OS_SYMBIAN
 /*!
-   This Slot inserts the selected contacts from Contacts-picker into the lineedit cursor position.    
+   This Slot appends the selected contacts to the end of the lineedit content.    
 */
-void NmRecipientLineEdit::insertSelectedContacts(const QVariant &selectedContacts)
+void NmRecipientLineEdit::addSelectedContacts(const QVariant &selectedContacts)
 {
     NM_FUNCTION;
     
-    if (!selectedContacts.isNull()) {
-        CntServicesContactList contactList;
-        contactList = qVariantValue<CntServicesContactList>(selectedContacts);
+    // If user selected contact
+    if (!selectedContacts.isNull()) {        
+
+        // If the lineedit is not empty and if there is no ";" or "; " at the end,
+        // add a delimiter("; ") at the end.
+        if (this->text().length() != 0 && !(this->text().endsWith(Semicolon)) && 
+            !(this->text().endsWith(Delimiter))){
+            
+            // Move cursor to the end of the lineedit.
+            this->setCursorPosition(this->text().length());       
+            QTextCursor textCursor(this->textCursor());
+            // Append delimiter("; ") to the end of the lineedit
+            textCursor.insertText(Delimiter);
+        }
+        
+        CntServicesContactList contactList = qVariantValue<CntServicesContactList>(selectedContacts);
 
         // Loop through all the selected contacts.
         for (int i = 0; i < contactList.count(); ++i) {
+            QString contactName = contactList[i].mDisplayName;
             QString contactEmailAddress = contactList[i].mEmailAddress;
-            QString contactName = contactList[i].mDisplayName;
-
-            // If this contact has no name.
-            if(contactName.isEmpty()) {				
-                // Generate a custom keyevent for this contact's emailaddress.
-                QKeyEvent contactEmailAddressKeyEvent(QEvent::KeyPress, Qt::Key_unknown, 
-                		                              Qt::NoModifier, contactEmailAddress);
-                // Forward this contactEmailAddressKeyEvent to base class to handle.
-                NmHtmlLineEdit::keyPressEvent(&contactEmailAddressKeyEvent);
+            
+            // If this contact has no name, use it's emailaddress as the display name
+            if(contactName.isEmpty()) {	
+                // Move cursor to the end of the lineedit.
+                this->setCursorPosition(this->text().length());       
+                QTextCursor textCursor(this->textCursor());
+                // Append contactEmailAddress to the end of the lineedit
+                textCursor.insertText(contactEmailAddress);
             }
+            // If this contact has name, use the name as the display name
             else {
                 // Handle a rare case: there are contacts has same name but different emailaddress.
                 for (int i = 0; i != mRecipientsAddedFromContacts.count(); ++i) {
@@ -100,19 +114,17 @@
                     }
                 }
                 
-                // Generate custom keyevent for this contact's name.
-                QKeyEvent contactNameKeyEvent(QEvent::KeyPress, Qt::Key_unknown, 
-                                              Qt::NoModifier, contactName);
-                // Forward this contactNameKeyEvent to base class to handle.
-                NmHtmlLineEdit::keyPressEvent(&contactNameKeyEvent);
+                // Move cursor to the end of the lineedit.
+                this->setCursorPosition(this->text().length());       
+                QTextCursor textCursor(this->textCursor());
+                // Append contactName to the end of the lineedit
+                textCursor.insertText(contactName);
             }
-
-            // Generate custom keyevent for Delimiter("; ").
-            QKeyEvent delimiterKeyEvent(QEvent::KeyPress, Qt::Key_unknown, 
-                                        Qt::NoModifier, Delimiter);
-            // Forward the delimiterKeyEvent to base class to handle.
-            NmHtmlLineEdit::keyPressEvent(&delimiterKeyEvent);
-			
+                
+            QTextCursor textCursor(this->textCursor());
+            // Append delimiter("; ")
+            textCursor.insertText(Delimiter);
+            
             // Form the contact into Qmail NmAddress format.
             NmAddress contact;
             contact.setAddress(contactEmailAddress);
@@ -120,7 +132,7 @@
             
             // Add this NmAddress formated contact into mRecipientsAddedFromContacts.
             mRecipientsAddedFromContacts.append(contact);
-        }
+        } // end of for (int i = 0; i < contactList.count(); ++i)  
     }
     else {
         //Request returned NULL 
--- a/emailuis/nmframeworkadapter/inc/nmframeworkadapter.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmframeworkadapter/inc/nmframeworkadapter.h	Thu Jun 24 14:32:18 2010 +0300
@@ -66,7 +66,7 @@
 
     int getMailboxById(const NmId& id, NmMailbox*& mailbox);
 
-    int deleteMailboxById(const NmId& id);
+    QPointer<NmOperation> deleteMailboxById(const NmId& id);
 
     int getMessageById(
             const NmId& mailboxId,
@@ -200,6 +200,12 @@
     void updateActiveFolder(const NmId &mailboxId, const NmId &folderId);
     
     QPointer<NmOperation> removeDraftMessage(NmMessage *message);
+	
+	int copyMessages(
+        const NmId &mailboxId,
+        const QList<quint64> &messageIds,
+        const NmId &sourceFolderId,
+        const NmId &destinationFolderId);
     
 signals:
 
@@ -295,7 +301,15 @@
     
     void doUpdateActiveFolderL(const NmId &mailboxId, const NmId &folderId);
     
-    CEmailExtension* getEMailStateExtensionL();      
+    CEmailExtension* getEMailStateExtensionL();  
+	
+    void copyMessagesL(
+        const NmId &mailboxId, 
+        const QList<quint64> &messageIds,
+        const NmId &sourceFolderId,
+        const NmId &destinationFolderId);
+	
+	void deleteMailboxByIdL(const NmId &mailboxId);    
 
 
 private: // Data
@@ -303,7 +317,9 @@
     CFSMailClient* mFSfw; // Singleton, not owned
     NmMailboxSearchObserver *mSearchObserver; // Owned
     CFSMailBox* mCurrentMailBox; // Owned
-    CEmailExtension* mEmailExtension; // not owned
+    CEmailExtension* mStateExtension; // not owned
+
+
 };
 
 
--- a/emailuis/nmframeworkadapter/inc/nmframeworkadapterheaders.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmframeworkadapter/inc/nmframeworkadapterheaders.h	Thu Jun 24 14:32:18 2010 +0300
@@ -67,6 +67,7 @@
 #include "nmfwastoremessageoperation.h"
 #include "nmmailboxsearchobserver.h"
 #include "nmfwaremovedraftmessageoperation.h"
+#include "nmfwadeletemailboxoperation.h"
 
 // fs email
 #include <CFSMailCommon.h>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/nmframeworkadapter/inc/nmfwadeletemailboxoperation.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#ifndef NMFWADELETEMAILBOXOPERATION_H_
+#define NMFWADELETEMAILBOXOPERATION_H_
+
+#include <QPointer>
+#include <nmoperation.h>
+#include <nmcommon.h>
+#include <CFSMailCommon.h>
+#include <MFSMailRequestObserver.h>
+
+class NmId;
+class NmDataPluginInterface;
+class CFSMailClient;
+
+class NmFwaDeleteMailboxOperation : public NmOperation,
+                                         public MFSMailRequestObserver
+{
+    Q_OBJECT
+public:
+    NmFwaDeleteMailboxOperation(const NmId &mailboxId,
+                                CFSMailClient &mailClient);
+    
+    // from MFSMailRequestObserver
+    void RequestResponseL(TFSProgress aEvent, TInt aRequestId);
+
+protected:
+    void doRunAsyncOperation();
+    void doCompleteOperation();
+    void doCancelOperation();
+
+private:
+    ~NmFwaDeleteMailboxOperation();
+
+    void deleteMailboxL();
+
+private:
+    const NmId &mMailboxId;    // Owned
+    CFSMailClient &mMailClient;
+    TInt mRequestId;
+};
+
+#endif /* NMFWADELETEMAILBOXOPERATION_H_ */
--- a/emailuis/nmframeworkadapter/nmframeworkadapter.pro	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmframeworkadapter/nmframeworkadapter.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -13,7 +13,7 @@
 #
 # Description: 
 #
-# Version : %version: e003sa37#30 %
+# Version : %version: e002sa38#31 %
 TEMPLATE = lib
 TARGET = nmframeworkadapter
 
@@ -39,7 +39,8 @@
            inc/nmfwamessagepartfetchingoperation.h \
            inc/nmmailboxsearchobserver.h \
            inc/nmfwamessagepartsfetchingoperation.h \
-           inc/nmfwaremovedraftmessageoperation.h
+           inc/nmfwaremovedraftmessageoperation.h \
+           inc/nmfwadeletemailboxoperation.h
 
 SOURCES += src/nmframeworkadapter.cpp \
            src/nmfwamessagefetchingoperation.cpp \
@@ -54,7 +55,9 @@
            src/nmfwamessagepartfetchingoperation.cpp \
            src/nmmailboxsearchobserver.cpp \
            src/nmfwamessagepartsfetchingoperation.cpp \
-           src/nmfwaremovedraftmessageoperation.cpp
+           src/nmfwaremovedraftmessageoperation.cpp \
+           src/nmfwadeletemailboxoperation.cpp
+           
 
 RESOURCES +=
 
--- a/emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmframeworkadapter/src/nmframeworkadapter.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -40,7 +40,7 @@
 : mFSfw(NULL),
   mSearchObserver(NULL),
   mCurrentMailBox(NULL),
-  mEmailExtension(NULL)
+  mStateExtension(NULL)
 {
     NM_FUNCTION;
     
@@ -59,13 +59,10 @@
 {
     NM_FUNCTION;
     
-    if (mCurrentMailBox && mEmailExtension) {
-        mCurrentMailBox->ReleaseExtension( mEmailExtension );
-    }
     delete mCurrentMailBox;
     mCurrentMailBox = NULL;
     
-    mEmailExtension = NULL;    
+    mStateExtension = NULL;    
     
     if (mSearchObserver) {
         delete mSearchObserver;
@@ -167,17 +164,17 @@
 }
 
 /*!
-    Delete the mailbox with the given id. Not implemented yet.
+    Deletes the mailbox with the given id asynchronously.
 
-    \param id Id of the mailbox to be deleted.
+    \param mailboxId Id of the mailbox to be deleted.
 
     \return Error code.
  */
-int NmFrameworkAdapter::deleteMailboxById(const NmId& /*id*/)
+QPointer<NmOperation> NmFrameworkAdapter::deleteMailboxById(const NmId& mailboxId)
 {
     NM_FUNCTION;
-    
-    return 0;
+    QPointer<NmOperation> oper = new NmFwaDeleteMailboxOperation(mailboxId, *mFSfw);
+    return oper;
 }
 
 /*!
@@ -685,16 +682,15 @@
     const NmId &mailboxId, const NmId &folderId)
 {
     if ((mFSfw) && (!mCurrentMailBox || mCurrentMailBox->GetId()!=mailboxId)) {
-        mEmailExtension = NULL;        
         delete mCurrentMailBox;
         mCurrentMailBox = NULL;
         mCurrentMailBox = mFSfw->GetMailBoxByUidL(mailboxId);
         }
     CEmailExtension *extension = getEMailStateExtensionL();
-    CMailboxStateExtension *boxExtension = 
+    CMailboxStateExtension *stateExtension = 
         static_cast<CMailboxStateExtension*>(extension);        
-    if (boxExtension) {
-        boxExtension->NotifyActiveFolderChanged(mailboxId, folderId);    
+    if (stateExtension) {
+        stateExtension->NotifyActiveFolderChanged(mailboxId, folderId);    
     }
 }
 
@@ -703,11 +699,12 @@
  */
 CEmailExtension* NmFrameworkAdapter::getEMailStateExtensionL()
 {      
-    if (!mEmailExtension && mCurrentMailBox) {
-        mEmailExtension = 
-            mCurrentMailBox->ExtensionL(KEmailMailboxStateExtensionUid);
+    if (!mStateExtension && mCurrentMailBox) {
+        // This extension is owned and deleted by the plugin, so no need to
+        // use release unless the extension will be relocated into extensionbase.
+        mStateExtension =  mCurrentMailBox->ExtensionL(KEmailMailboxStateExtensionUid);
     }    
-    return mEmailExtension;
+    return mStateExtension;
 }
 
 /*!
@@ -1348,6 +1345,26 @@
 }
 
 /*!
+    Copy messages between folders from specific mailbox.
+
+    \param mailboxId Id of the mailbox containing messages.
+    \param messageIds The list of source message Ids.
+    \param newMessages The list of destination message Ids.
+    \param sourceFolderId Id of source folder.
+    \param destinationFolderId Id of destination folder.
+ */
+int NmFrameworkAdapter::copyMessages(
+    const NmId &mailboxId,
+    const QList<quint64>& messageIds,
+    const NmId& sourceFolderId,
+    const NmId& destinationFolderId)
+{
+    NM_FUNCTION;
+    TRAPD(error, copyMessagesL(mailboxId, messageIds, sourceFolderId, destinationFolderId));
+    return error;
+}
+
+/*!
     Subscribe to events from a mailbox.
 
     \param mailboxId Id of the mailbox.
@@ -1409,6 +1426,39 @@
     CleanupStack::PopAndDestroy(folder);
 }
 
+/*!
+    Leaving version of copyMessages
+*/
+void NmFrameworkAdapter::copyMessagesL(
+    const NmId &mailboxId,
+    const QList<quint64>& messageIds,
+    const NmId& sourceFolderId,
+    const NmId& destinationFolderId)
+{
+    NM_FUNCTION;
+
+    RArray<TFSMailMsgId> messages;
+    RArray<TFSMailMsgId> copiedMessages;
+    
+    CleanupClosePushL(messages);
+    CleanupClosePushL(copiedMessages);
+    
+    for (TInt i = 0; i < messageIds.count(); i++) {
+        NmId tmpId(messageIds[i]);
+        messages.AppendL(TFSMailMsgId(tmpId));
+    }
+    
+    CFSMailBox* mailBox = NULL;
+    mailBox = mFSfw->GetMailBoxByUidL(mailboxId);
+    if (mailBox) {
+        mailBox->CopyMessagesL(messages, copiedMessages, 
+            TFSMailMsgId(sourceFolderId), 
+            TFSMailMsgId(destinationFolderId));
+        delete mailBox;
+    }
+    
+    CleanupStack::PopAndDestroy(2,&messages);    
+}
 
 /*!
    Sends the given message.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/nmframeworkadapter/src/nmfwadeletemailboxoperation.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+#include "nmframeworkadapterheaders.h"
+
+/*!
+    \class NmFwaDeleteMailboxOperation
+    
+    \brief NmFwaDeleteMailboxOperation is an async operation which deletes a mailbox.
+    
+    NmFwaDeleteMailboxOperation is an async operation which deletes a mailbox. 
+    \sa NmOperation
+ */
+
+/*!
+    Constructor
+    
+    \param mailboxId Mailbox id to be deleted.
+    \param mailClient Reference to mail client object.
+ */
+NmFwaDeleteMailboxOperation::NmFwaDeleteMailboxOperation(
+    const NmId &mailboxId,
+    CFSMailClient &mailClient) :
+        mMailboxId(mailboxId),
+        mMailClient(mailClient),
+        mRequestId(NmNotFoundError)
+{
+    NM_FUNCTION;
+    
+    mMailClient.IncReferenceCount();
+}
+
+/*!
+    Destructor
+ */
+NmFwaDeleteMailboxOperation::~NmFwaDeleteMailboxOperation()
+{
+    NM_FUNCTION;
+    
+    doCancelOperation();
+    mMailClient.Close(); // decrease ref count
+}
+
+/*!
+    Called after base object construction via timer event, runs the
+    async operation.
+    
+    \sa NmOperation
+ */
+void NmFwaDeleteMailboxOperation::doRunAsyncOperation()
+{
+    NM_FUNCTION;
+    
+    TRAPD(err, deleteMailboxL());
+        
+    if (err != KErrNone) {
+        completeOperation(NmGeneralError);
+    }
+}
+
+/*!
+    
+ */
+void NmFwaDeleteMailboxOperation::doCompleteOperation()
+{
+    NM_FUNCTION;
+    
+    mRequestId = NmNotFoundError;
+}
+
+/*!
+    
+ */
+void NmFwaDeleteMailboxOperation::doCancelOperation()
+{
+    NM_FUNCTION;
+
+    // delete mailbox operation is not cancellable
+}
+    
+/*!
+    Asynchronous request response message.
+    
+    \param aEvent Plugin event description.
+    \param aRequestId Request id of asyncronous operation.
+ */
+void NmFwaDeleteMailboxOperation::RequestResponseL(TFSProgress aEvent,
+                                                    TInt aRequestId)
+{
+    NM_FUNCTION;
+    
+    TFSProgress::TFSProgressStatus status = aEvent.iProgressStatus;
+
+    if (aRequestId == mRequestId) {
+        if (status == TFSProgress::EFSStatus_RequestComplete && !aEvent.iError) {
+            completeOperation(NmNoError);
+        }
+        else {
+            completeOperation(NmGeneralError);
+        }
+    }
+}
+
+/*!
+    Removes the message.
+ */
+void NmFwaDeleteMailboxOperation::deleteMailboxL()
+{
+    NM_FUNCTION;
+    const TFSMailMsgId mailboxId(mMailboxId);
+    mRequestId = mMailClient.DeleteMailBoxByUidL(mailboxId, *this);
+}
--- a/emailuis/nmhswidget/conf/nmhswidgettitle.docml	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/conf/nmhswidgettitle.docml	Thu Jun 24 14:32:18 2010 +0300
@@ -21,7 +21,7 @@
             <enums name="alignment" value="AlignRight|AlignVCenter|AlignTrailing"/>
             <real name="z" value="3"/>
             <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-            <sizehint height="var(hb-param-text-height-secondary)" type="FIXED" width="6un"/>
+            <sizehint height="var(hb-param-text-height-secondary)" type="FIXED" width="9un"/>
             <string locid="txt_mail_widget_list_l1" name="plainText" value="(999)"/>
             <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
         </widget>
@@ -29,9 +29,9 @@
             <icon iconName="note_warning" name="icon"/>
             <real name="z" value="4"/>
             <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
-            <sizehint height="5.5un" type="FIXED" width="5.5un"/>
-            <sizehint height="5.5un" type="MINIMUM" width="5.5un"/>
-            <sizehint height="5.5un" type="MAXIMUM" width="5.5un"/>
+            <sizehint height="7un" type="FIXED" width="7un"/>
+            <sizehint height="7un" type="MINIMUM" width="7un"/>
+            <sizehint height="7un" type="MAXIMUM" width="7un"/>
             <string name="alignment" value="AlignVCenter|AlignHCenter"/>
         </widget>
         <real name="z" value="1"/>
@@ -43,7 +43,7 @@
             <anchoritem dst="mailboxNameLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="mailboxIcon" srcEdge="RIGHT"/>
             <anchoritem dst="mailboxNameLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
             <anchoritem dst="mailboxNameLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" src="unreadCountLabel" srcEdge="LEFT"/>
-            <anchoritem dst="collapseExpandIcon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" src="" srcEdge="RIGHT"/>
+            <anchoritem dst="collapseExpandIcon" dstEdge="RIGHT" spacing="-0.25un" src="" srcEdge="RIGHT"/>
             <anchoritem dst="collapseExpandIcon" dstEdge="CENTERV" spacing="0un" src="unreadCountLabel" srcEdge="CENTERV"/>
             <anchoritem dst="unreadCountLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" src="collapseExpandIcon" srcEdge="LEFT"/>
             <anchoritem dst="unreadCountLabel" dstEdge="CENTERV" spacing="0un" src="mailboxNameLabel" srcEdge="CENTERV"/>
--- a/emailuis/nmhswidget/inc/nmhswidget.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/inc/nmhswidget.h	Thu Jun 24 14:32:18 2010 +0300
@@ -28,6 +28,7 @@
 class QTranslator;
 class HbFrameDrawer;
 class NmHsWidgetDateTimeObserver;
+class HbLabel;
 
 class NmHsWidget : public HbWidget
 {
@@ -40,13 +41,14 @@
 public:
     NmHsWidget(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0);
     ~NmHsWidget();
+
+    QPainterPath shape() const;
     
 public slots:
     //from home screen fw
     void onInitialize();
     void onShow();
     void onHide();
-    void onUninitialize();
     //engine
     void updateMailData();
     void onEngineException(const int& exc);
@@ -65,13 +67,18 @@
     void setPreferences(const QStringList &names);
     void error();
 private:
-    bool setupLocalization();
+    void setupLocalization();
     void setupUi();
     void updateMailRowsVisibility(const int visibleCount);
+    void addNoMailsLabelToLayout();
+    void removeNoMailsLabelFromLayout();
+    void addEmailRowsToLayout();
+    void removeEmailRowsFromLayout();
+    void updateLayout(const int visibleCount);
     void toggleExpansionState();  
 
 protected:
-    void updateMailRowsList(const int mailCount);
+    void createMailRowsList();
     
 private:
     NmHsWidgetEmailEngine* mEngine;
@@ -83,8 +90,8 @@
     QTranslator *mTranslator;
     HbFrameDrawer* mBackgroundFrameDrawer;
     bool mIsExpanded;
-    bool mStaticWidget;
     NmHsWidgetDateTimeObserver* mDateObserver;
+    HbLabel *mNoMailsLabel; 
     
 public:    
     friend class TestNmHsWidget;     
--- a/emailuis/nmhswidget/inc/nmhswidgetconsts.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/inc/nmhswidgetconsts.h	Thu Jun 24 14:32:18 2010 +0300
@@ -23,7 +23,7 @@
  *************************************************/
 //Maximum amount of envelopes that can be provided to client in getData function
 //This is also the amount of envelopes that is kept in mData all the time
-const int KMaxNumberOfEnvelopesProvided = 2;
+const int KMaxNumberOfEnvelopesProvided = 3;
 //Maximum value for unread count
 const int KMaxUnreadCount = 999; 
 
--- a/emailuis/nmhswidget/inc/nmhswidgetemailrow.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/inc/nmhswidgetemailrow.h	Thu Jun 24 14:32:18 2010 +0300
@@ -26,6 +26,7 @@
 
 //FORWARD DECLARATIONS:
 class HbLabel;
+class HbFrameItem;
 
 class NmHsWidgetEmailRow : public HbWidget
 {
@@ -35,9 +36,7 @@
     NmHsWidgetEmailRow(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0);
     ~NmHsWidgetEmailRow();
     NmId messageId();
-    bool loadDocML();
-    void setFontsSize( bool read );
-    void setFontsColor( bool pressed );
+    bool setupUI();
 
 public slots:
     void updateMailData( const NmMessageEnvelope& envelope );
@@ -49,6 +48,11 @@
 private:
     void setIconsToWidget( const NmMessageEnvelope& envelope );
     void hideIcons();
+    bool loadDocML();
+    bool setupGraphics();
+    void setFontsSize( bool read );
+    void setHighlighedFontsColor( bool pressed );
+    void showHighlight( bool pressed );
     
 protected:
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
@@ -65,6 +69,7 @@
     QDateTime mMessageSentTime;
     QList <HbLabel*> mStatusIcons;  
     NmMessageEnvelope mEnvelope;
+    HbFrameItem* mBackgroundLayoutItem;
     
 };
 
--- a/emailuis/nmhswidget/inc/nmhswidgettitlerow.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/inc/nmhswidgettitlerow.h	Thu Jun 24 14:32:18 2010 +0300
@@ -23,6 +23,7 @@
 //FORWARD DECLARATIONS:
 class HbLabel;
 class HbPushButton;
+class HbFrameItem;
 
 class NmHsWidgetTitleRow : public HbWidget
 {
@@ -31,15 +32,17 @@
 public:
     NmHsWidgetTitleRow(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0);
     ~NmHsWidgetTitleRow();
-    bool loadDocML();
-    
+    QPainterPath shape() const;
+    bool setupUI(); 
     void setAccountIcon(const QString& accountIconName );
     void setExpandCollapseIcon(const bool& expand);
-    void setFontsColor( bool pressed );
     
 private:
-
+    bool loadDocML();
+    bool setupGraphics();
     void updateData();
+    void setHighlighedFontsColor( bool pressed );
+    void showHighlight( bool pressed );
     
 public slots: 
     void updateAccountName(const QString& accountName );
@@ -61,6 +64,7 @@
     HbPushButton *mCollapseExpIconLabel;
     QString mAccountName;
     int mUnreadCount;
+    HbFrameItem* mBackgroundLayoutItem;
 };
 
 #endif // NMHSWIDGETTITLEROW_H_
--- a/emailuis/nmhswidget/src/nmhswidget.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/src/nmhswidget.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -20,6 +20,7 @@
 #include <QTranslator>
 #include <hbframedrawer.h>
 #include <hbframeitem.h>
+#include <hblabel.h>
 #include "nmcommon.h"
 #include "nmhswidget.h"
 #include "nmhswidgetemailengine.h"
@@ -40,15 +41,15 @@
       mTranslator(0),
       mBackgroundFrameDrawer(0),
       mIsExpanded(false),
-      mStaticWidget(true),
-      mDateObserver(0)
+      mDateObserver(0),
+      mNoMailsLabel(0)
 {
     NM_FUNCTION;
 }
 
 /*!
-    Destructor
-*/
+ Destructor
+ */
 NmHsWidget::~NmHsWidget()
 {
     NM_FUNCTION;
@@ -67,134 +68,163 @@
 }
 
 /*!
-    \fn void NmHsWidget::onShow()
+ \fn QPainterPath NmHsWidget::shape()
 
-    called by home screen fw when widget gets visible
-*/
+ Called by home screen fw to check widget boundaries, needed to draw
+ outside widget boundingRect.
+ /return QPainterPath path describing actual boundaries of widget 
+  including child items
+ */
+QPainterPath NmHsWidget::shape() const
+{
+    NM_FUNCTION;
+    
+    QPainterPath path;
+    path.setFillRule(Qt::WindingFill);
+    
+    path.addRect(this->rect());
+    if (mTitleRow){
+        path.addPath(mTitleRow->shape());
+    }
+    return path.simplified();
+}
+
+/*!
+ \fn void NmHsWidget::onShow()
+
+ called by home screen fw when widget gets visible
+ */
 void NmHsWidget::onShow()
 {
     NM_FUNCTION;
-    if (mEngine)
-        {
+    if (mEngine) {
         mEngine->activate();
-        }
-}
-
-/*!
-    \fn void NmHsWidget::onHide()
-
-    called by home screen fw when widget gets hidden
-*/
-void NmHsWidget::onHide()
-{
-    NM_FUNCTION;
-    if (mEngine)
-        {
-        mEngine->suspend();
-        }
+    }
 }
 
 /*!
-    Initializes Localization.
-    /post mTranslator constructed & localization file loaded
-    returns false in failure, otherwise true
-*/
-bool NmHsWidget::setupLocalization()
+ \fn void NmHsWidget::onHide()
+
+ called by home screen fw when widget gets hidden
+ */
+void NmHsWidget::onHide()
 {
     NM_FUNCTION;
-    
-    //Use correct localisation
-    bool ret(false); 
-    mTranslator = new QTranslator();
-    QString lang = QLocale::system().name();
-    ret = mTranslator->load(KNmHsWidgetLocFileName + lang, KNmHsWidgetLocLocation);
-    QCoreApplication::installTranslator(mTranslator);
-
-    return ret;
+    if (mEngine) {
+        mEngine->suspend();
+    }
 }
 
 /*!
-    Initializes UI. Everything that is not done in docml files should be here.
-    return true if ok, in error false.
-*/
+ Initializes Localization.
+ /post mTranslator constructed & localization file loaded
+ */
+void NmHsWidget::setupLocalization()
+{
+    NM_FUNCTION;
+
+    //Use correct localisation
+    mTranslator = new QTranslator();
+    QString lang = QLocale::system().name();
+    mTranslator->load(KNmHsWidgetLocFileName + lang, KNmHsWidgetLocLocation);
+    QCoreApplication::installTranslator(mTranslator);
+}
+
+/*!
+ Initializes UI. Everything that is not done in docml files should be here.
+ return true if ok, in error false.
+ */
 void NmHsWidget::setupUi()
 {
     NM_FUNCTION;
-    
-    setContentsMargins( KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin,
-            KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin);
-    
+
+    setContentsMargins(KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin,
+        KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin);
+
     //Setup layout
     mRowLayout = new QGraphicsLinearLayout(Qt::Vertical);
 
     mRowLayout->setContentsMargins(KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin,
-            KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin);
+        KNmHsWidgetContentsMargin, KNmHsWidgetContentsMargin);
     mRowLayout->setSpacing(KNmHsWidgetContentsMargin);
     setLayout(mRowLayout);
-   
-   //background
-   mBackgroundFrameDrawer = new HbFrameDrawer( KNmHsWidgetBackgroundImage, HbFrameDrawer::NinePieces );
-   HbFrameItem* backgroundLayoutItem = new HbFrameItem( mBackgroundFrameDrawer );
-   //set to NULL to indicate that ownership transferred
-   mBackgroundFrameDrawer = NULL;
-   setBackgroundItem( backgroundLayoutItem );
+
+    //background
+    mBackgroundFrameDrawer = new HbFrameDrawer(KNmHsWidgetBackgroundImage,
+        HbFrameDrawer::NinePieces);
+    HbFrameItem* backgroundLayoutItem = new HbFrameItem(mBackgroundFrameDrawer);
+    //set to NULL to indicate that ownership transferred
+    mBackgroundFrameDrawer = NULL;
+    setBackgroundItem(backgroundLayoutItem);
+    
+    //Create NoMails Label.
+    mNoMailsLabel = new HbLabel(this);
+    mNoMailsLabel->setPlainText(hbTrId("txt_mail_widget_info_no_messages"));
+    HbFontSpec fontSpec(HbFontSpec::Secondary);
+    HbStyle style;
+    qreal size;
+    bool found = style.parameter(QString("hb-param-text-height-tiny"), size);
+    if (found) {
+        fontSpec.setTextHeight(size);
+    }
+    mNoMailsLabel->setFontSpec(fontSpec);
+    QColor newFontColor;
+    newFontColor = HbColorScheme::color("qtc_hs_list_item_content_normal");
+    mNoMailsLabel->setTextColor(newFontColor);
+    mNoMailsLabel->setAlignment(Qt::AlignCenter);
+    mNoMailsLabel->setVisible(false);
+
 }
 
 /*!
-    Initializes the widget.
-    
-    called by home screen fw when widget is added to home screen
-*/
+ Initializes the widget.
+ 
+ called by home screen fw when widget is added to home screen
+ */
 void NmHsWidget::onInitialize()
 {
     NM_FUNCTION;
-    
-    QT_TRY{       
+
+    QT_TRY {
         setupUi();
-        //emit error if localization fails
-        if(!setupLocalization()){
+        setupLocalization();
+
+        //Engine construction is 2 phased. 
+        mEngine = new NmHsWidgetEmailEngine(mAccountId);
+        //Client must connect to exception signals before calling the initialize function
+        //because we don't want to miss any signals.
+        connect(mEngine, SIGNAL( exceptionOccured(const int&) ), this,
+            SLOT( onEngineException(const int&) ));
+        if (!mEngine->initialize()) {
+            //engine construction failed. Give up.
             emit error();
             return;
         }
-        
-        //Engine construction is 2 phased. 
-        mEngine = new NmHsWidgetEmailEngine( mAccountId );
-        //Client must connect to exception signals before calling the initialize function
-        //because we don't want to miss any signals.
-        connect(mEngine, SIGNAL( exceptionOccured(const int&) )
-                ,this, SLOT( onEngineException(const int&) ) );
-        if(!mEngine->initialize())
-            {
-            //engine construction failed. Give up.
-            emit error();
-            return;
-            }
 
         //construct and load docml for title row
-        mTitleRow = new NmHsWidgetTitleRow(); 
-        if( !mTitleRow->loadDocML()){
+        mTitleRow = new NmHsWidgetTitleRow(this);
+        if (!mTitleRow->setupUI()) {
             //if docml loading fails no point to proceed
-            //but memoryleak must be prevented
-            delete mTitleRow;
-            mTitleRow = NULL;
             emit error();
             return;
         }
         mRowLayout->addItem(mTitleRow);
         mTitleRow->updateAccountName(mEngine->accountName());
-    
-	    //create observer for date/time change events
-	    mDateObserver = new NmHsWidgetDateTimeObserver();
-    
+
+        //create observer for date/time change events
+        mDateObserver = new NmHsWidgetDateTimeObserver();
+
+        //Crete MailRows and associated connections
+        createMailRowsList();
+
         updateMailData();
         mTitleRow->updateUnreadCount(mEngine->unreadCount());
         mTitleRow->setAccountIcon(mAccountIconName);
         mTitleRow->setExpandCollapseIcon(mIsExpanded);
-        
+
         //Get signals about changes in mail data
-        connect(mEngine, SIGNAL( mailDataChanged() )
-                ,this, SLOT( updateMailData() ) );
-        
+        connect(mEngine, SIGNAL( mailDataChanged() ), this, SLOT( updateMailData() ));
+
         //Get Signals about changes in unread count
         connect(mEngine, SIGNAL( unreadCountChanged(const int&) )
                 ,mTitleRow, SLOT( updateUnreadCount(const int&) ) );
@@ -209,76 +239,58 @@
 	    connect(mTitleRow, SIGNAL( expandCollapseButtonPressed() )
 	            ,this, SLOT( handleExpandCollapseEvent() ) );
 
-	    //resize here so homescreen will place widget correctly on screen
-	    setPreferredSize( mRowLayout->preferredSize() );
-	    if (parentWidget()) {
-	        //to place widget properly after adding to homescreen
-	        parentWidget()->resize(preferredSize()); 
-		}
     }
-    QT_CATCH(...){
+    QT_CATCH(...) {
         emit error();
     }
 
 }
 
-/*!
-    Uninitializes the widget.
-    
-    called by home screen fw when widget is removed from home screen
-*/
-void NmHsWidget::onUninitialize()
-{
-    NM_FUNCTION;
-}
 
 /*!
-    updateMailData slot
-*/
+ updateMailData slot
+ */
 void NmHsWidget::updateMailData()
 {
     NM_FUNCTION;
-    
+
     QList<NmMessageEnvelope> envelopes;
     int count = 0;
     if (mIsExpanded) {
         count = mEngine->getEnvelopes(envelopes, KMaxNumberOfMailsShown);
-        }
+    }
 
-    updateMailRowsList(count);
-    
-    for(int i=0; i<envelopes.count(); i++)
-        {
-        mMailRows[i]->updateMailData( envelopes[i] );
-        }
+    updateLayout(count);
+    //count is safe for envelopes and mMailRows
+    for (int i = 0; i < count; i++) {
+        mMailRows.at(i)->updateMailData(envelopes.at(i));
+    }
 }
 
 /*!
-    Sets monitored account id from given string
-    Needed for home screen framework which supports only QString type properties
-*/
+ Sets monitored account id from given string
+ Needed for home screen framework which supports only QString type properties
+ */
 void NmHsWidget::setAccountId(const QString &text)
 {
     NM_FUNCTION;
-    
+
     bool ok;
     quint64 id = text.toULongLong(&ok);
-    if (!ok)
-        {
-        NM_ERROR(1,"NmHsWidget::setAccountId: invalid account ID data, signal finished()!!!"); 
+    if (!ok) {
+        NM_ERROR(1, "NmHsWidget::setAccountId: invalid account ID data, signal finished()!!!");
         //No valid account id so give up
         emit finished();
-        }
-    else
-        {
-        mAccountId.setId(id);
-        }
+        return;
+    }
+
+    mAccountId.setId(id);
 }
 
 /*!
-    Returns monitored account id as a string
-    Needed for home screen framework which supports only QString type properties
-*/
+ Returns monitored account id as a string
+ Needed for home screen framework which supports only QString type properties
+ */
 QString NmHsWidget::accountId() const
 {
     NM_FUNCTION;
@@ -286,8 +298,8 @@
 }
 
 /*!
-    Sets monitored account icon name from given string
-*/
+ Sets monitored account icon name from given string
+ */
 void NmHsWidget::setAccountIconName(const QString &text)
 {
     NM_FUNCTION;
@@ -295,8 +307,8 @@
 }
 
 /*!
-    Returns monitored account icon name
-*/
+ Returns monitored account icon name
+ */
 QString NmHsWidget::accountIconName() const
 {
     NM_FUNCTION;
@@ -304,8 +316,8 @@
 }
 
 /*!
-    Slot to handle expand/collapse trigger event
-*/
+ Slot to handle expand/collapse trigger event
+ */
 void NmHsWidget::handleExpandCollapseEvent()
 {
     NM_FUNCTION;
@@ -313,153 +325,212 @@
 }
 
 /*!
-    Sets widget expand/collapse state
-    /post widget expansion state is changed
-*/
+ Sets widget expand/collapse state
+ /post widget expansion state is changed
+ */
 void NmHsWidget::toggleExpansionState()
 {
     NM_FUNCTION;
 
     mIsExpanded = !mIsExpanded;
-    
+
     //save new state to home screen
     QStringList propertiesList;
     propertiesList.append("widgetState");
     emit setPreferences(propertiesList);
-    
+
     //handle state change drawing
     updateMailData();
-    
+
     mTitleRow->setExpandCollapseIcon(mIsExpanded);
 }
 
 /*!
-    Sets expand/collapse state from given string (needed by homescreen)
-*/
+ Sets expand/collapse state from given string (needed by homescreen)
+ */
 void NmHsWidget::setWidgetStateProperty(QString value)
 {
     NM_FUNCTION;
-    if (value == KNmHsWidgetStateCollapsed)
-        {
+    if (value == KNmHsWidgetStateCollapsed) {
         mIsExpanded = false;
+    }
+    else {
+        mIsExpanded = true;
+    }
+}
+
+/*!
+ Returns widget expand/collapse state as string (needed by homescreen) 
+ */
+QString NmHsWidget::widgetStateProperty()
+{
+    NM_FUNCTION;
+    if (mIsExpanded) {
+        return KNmHsWidgetStateExpanded;
+    }
+    else {
+        return KNmHsWidgetStateCollapsed;
+    }
+}
+
+/*!
+ Updates mMailRows list to include KMaxNumberOfMailsShown mail row widgets
+ /post mMailRows contains KMaxNumberOfMailsShown mailRows 
+ */
+void NmHsWidget::createMailRowsList()
+{
+    NM_FUNCTION;
+
+    //make sure that there are as many email rows as needed
+    while (mMailRows.count() < KMaxNumberOfMailsShown) {
+        NmHsWidgetEmailRow *row = new NmHsWidgetEmailRow(this);
+        if (!row->setupUI()) {
+            NM_ERROR(1, "NmHsWidget::createMailRowsList row->setUpUI() fails");
+            //if setupUI fails no point to proceed
+            emit error();
+            return;
         }
-    else
-        {
-        mIsExpanded = true;
-        }
+        connect(row, SIGNAL(mailViewerLaunchTriggered(const NmId&)), mEngine,
+            SLOT(launchMailAppMailViewer(const NmId&)));
+        connect(mDateObserver, SIGNAL(dateTimeChanged()), row, SLOT(updateDateTime()));
+        mMailRows.append(row);
+    }
+
 }
 
 /*!
-    Returns widget expand/collapse state as string (needed by homescreen) 
-*/
-QString NmHsWidget::widgetStateProperty()
+ Updates the Layout to contain the right items
+ /param mailCount defines how many emails is to be shown
+ /post If widget is collapsed, the layout contains only titleRow widget.
+ If widget is expanded and mailCount is 0 layout will contain
+ titlerow & noMailsLabel. 
+ If widget is expanded and mailCount is greter
+ than zero, layout will contain titlerow and KMaxNumberOfMailsShown times
+ emailrow(s)
+ */
+void NmHsWidget::updateLayout(const int mailCount)
 {
     NM_FUNCTION;
-    if (mIsExpanded)
-        {
-        return KNmHsWidgetStateExpanded;
+    if (mIsExpanded) {
+        if (mailCount == 0) {
+            addNoMailsLabelToLayout();
+            removeEmailRowsFromLayout();
+        }
+        else {
+            removeNoMailsLabelFromLayout();
+            addEmailRowsToLayout();
         }
-    else
+    }
+    else {
+        removeNoMailsLabelFromLayout();
+        removeEmailRowsFromLayout();
+    }
+
+    //resize the widget to new layout size
+    setPreferredSize(mRowLayout->preferredSize());
+
+    updateMailRowsVisibility(mailCount);
+}
+
+/*!
+ Updates mNoMailsLabel visibility based on widget state
+ /param mailCount defines how many mail rows is needed
+ /post if mail count is 0 and mIsExpanded equals true, then
+ the mNoMailLabel is added to the mRowLayout. 
+ */
+void NmHsWidget::addNoMailsLabelToLayout()
+{
+    NM_FUNCTION;
+    //Use sizes defined for titlerow and mailrow docml to indentify the correct size
+    //for the mNoMailslabel
+    if (mNoMailsLabel->isVisible() || mMailRows.isEmpty()) {
+        return;
+    }
+    QSizeF mailLabelSize(mTitleRow->maximumWidth(), KMaxNumberOfMailsShown
+        * mMailRows.first()->maximumHeight());
+    mNoMailsLabel->setPreferredSize(mailLabelSize);
+    mNoMailsLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+    //Add mNoMailsLabel to layout if not yet there and show it
+    mRowLayout->addItem(mNoMailsLabel);
+    //resize the widget to new layout size
+    mNoMailsLabel->show();
+}
+
+/*!
+ removeNoMailsLabelFromLayout removes mNoMailsLabel from the layout
+ /post mNoMailsLabel is not in mRowLayout
+ */
+void NmHsWidget::removeNoMailsLabelFromLayout()
+{
+    NM_FUNCTION;
+    //remove mNoMailsLabel from Layout and hide it
+    mRowLayout->removeItem(mNoMailsLabel);
+    mNoMailsLabel->hide();
+}
+
+/*!
+ addEmailRowsToLayout adds every emailrow to the layout
+ /post all elements in mMailRows are added to mRowLayout
+ */
+void NmHsWidget::addEmailRowsToLayout()
+{
+    NM_FUNCTION;
+    foreach(NmHsWidgetEmailRow *row, mMailRows)
         {
-        return KNmHsWidgetStateCollapsed;
+            mRowLayout->addItem(row);
         }
 }
 
 /*!
-    Updates mMailRows list to include correct amount of mail row widgets
-    /param mailCount defines how many mail rows is needed
-    /post mMailRows list includes NmHsWidgetEmailRow for each mail item 
-*/
-void NmHsWidget::updateMailRowsList(const int mailCount)
+ removeEmailRowsFromLayout removes every emailrow from the layout
+ /post none of the elements in mMailRows are in mRowLayout
+ */
+void NmHsWidget::removeEmailRowsFromLayout()
 {
     NM_FUNCTION;
-    
-    int neededRowsCount = mailCount;
-    //force size when static and expanded
-    if (mStaticWidget && mIsExpanded)
-        {
-        neededRowsCount = KMaxNumberOfMailsShown;
-        }
-    
-    while (mMailRows.count() != neededRowsCount)
+    foreach(NmHsWidgetEmailRow *row, mMailRows)
         {
-        //more mails to show than rows
-        if (mMailRows.count() < neededRowsCount)
-            {
-            NmHsWidgetEmailRow *row = new NmHsWidgetEmailRow();
-            if( !row->loadDocML()){
-                NM_ERROR(1,"NmHsWidget::updateMailRowsList row->loadDocML() fails");
-                //if docml loading fails no point to proceed
-                //but memoryleak must be prevented
-                delete row;
-                row = NULL;
-                emit error();
-                return;
-            }
-            connect(row, SIGNAL(mailViewerLaunchTriggered(const NmId&))
-                    ,mEngine, SLOT(launchMailAppMailViewer(const NmId&)));
-            connect( mDateObserver, SIGNAL(dateTimeChanged())
-                    ,row, SLOT(updateDateTime()) );
-            mMailRows.append(row);
-            mRowLayout->addItem(row);            
-            }
-        //too many rows
-        else if (mMailRows.count() > neededRowsCount)
-            {
-            mRowLayout->removeItem(mMailRows.last());
-            delete mMailRows.takeLast();
-            }
-        }
-    __ASSERT_ALWAYS( mMailRows.count() == neededRowsCount, User::Panic(_L("Invalid"), 500) );
-    
-    //resize the widget to new layout size
-    setPreferredSize( mRowLayout->preferredSize() );
-    
-    if (mStaticWidget)
-        {
-        this->updateMailRowsVisibility(mailCount);
+            mRowLayout->removeItem(row);
         }
 }
 
 /*!
-    Updates mail row visibilities in static widget
-    /param visibleCount defines how many items do have mail data
-    /post all row items having mail data are visible, other rows are hidden
-*/
+ Updates mail row visibilities in static widget
+ /param visibleCount defines how many items do have mail data
+ /post all row items having mail data are visible, other rows are hidden
+ */
 void NmHsWidget::updateMailRowsVisibility(const int visibleCount)
 {
     NM_FUNCTION;
-  
+
     // set visible as many rows as requested by visibleCount param
     bool isVisible;
-    for (int i=0; i < mMailRows.count(); i++) 
-        {
+
+    for (int i = 0; i < mMailRows.count(); i++) {
         isVisible = false;
-        if ((mIsExpanded) && (i < visibleCount)) 
-            {
+        if ((mIsExpanded) && (i < visibleCount)) {
             isVisible = true;
-            }
+        }
         mMailRows.at(i)->setVisible(isVisible);
-        }
+    }
 }
 
 /*!
-    onEngineException (NmHsWidgetEmailEngineExceptionCode exc)
-    signals widget to be finalized
-    /param exc exception type
-*/
+ onEngineException (NmHsWidgetEmailEngineExceptionCode exc)
+ signals widget to be finalized
+ /param exc exception type
+ */
 void NmHsWidget::onEngineException(const int& exc)
-    {
+{
     NM_FUNCTION;
-    switch (exc)
-        {
+    switch (exc) {
         case (NmEngineExcAccountDeleted):
-             emit finished(); //succesful ending
-             break;
+            emit finished(); //succesful ending
+            break;
         case (NmEngineExcFailure):
-             emit error(); //failure
-             break;
-        default: 
-            break; 
-        }
+            emit error(); //failure
+            break;
+        default:
+            break;
     }
+}
--- a/emailuis/nmhswidget/src/nmhswidgetdatetimeobserver_p.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/src/nmhswidgetdatetimeobserver_p.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -31,8 +31,12 @@
 {
     NM_FUNCTION;
     TCallBack callback( LocaleChangeCallback, this );
-    //TODO: Handle leave properly
-    TRAP_IGNORE(iLocaleNotifier = CEnvironmentChangeNotifier::NewL( CActive::EPriorityStandard, callback ));
+    
+    //CTC skipped as last else of macro QT_TRAP_THROWING cannot be tested (panics on purpose)
+#pragma CTC SKIP
+    QT_TRAP_THROWING(iLocaleNotifier = CEnvironmentChangeNotifier::NewL( CActive::EPriorityStandard, callback ));
+#pragma CTC ENDSKIP
+    
     iLocaleNotifier->Start();
 }
 
--- a/emailuis/nmhswidget/src/nmhswidgetemailengine.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/src/nmhswidgetemailengine.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -180,7 +180,7 @@
     list.clear(); //Reset the parameter list to avoid side effects
     int i = 0;
     for (; i < mEnvelopeList.count() && i < maxEnvelopeAmount; i++) {
-        NmMessageEnvelope env(*mEnvelopeList[i]);
+        NmMessageEnvelope env(*mEnvelopeList.at(i));
         list.append(env);
     }
     return i;
@@ -408,17 +408,26 @@
 {
     NM_FUNCTION;
     
-    XQApplicationManager appManager;
-    XQAiwRequest* request = appManager.create(
-            XQI_EMAIL_INBOX_VIEW, XQOP_EMAIL_INBOX_VIEW,
-            false);
-    
-    if (request) {
-        QList<QVariant> list;
-        list.append(QVariant(mMailboxId.id()));
-    
-        request->setArguments(list);
-        request->send();
+    QT_TRY{ 
+        XQApplicationManager appManager;
+        XQAiwRequest* request = appManager.create(
+                XQI_EMAIL_INBOX_VIEW, XQOP_EMAIL_INBOX_VIEW,
+                false);
+        
+        if (request) {
+            QList<QVariant> list;
+            list.append(QVariant(mMailboxId.id()));
+        
+            request->setSynchronous(true);
+            request->setArguments(list);
+            request->send();
+            delete request;
+        }
+    }
+    QT_CATCH(...){
+        // no actions taken.
+        // try-catch mechanism added to avoid crashing widget, in case XQAiwRequest
+        // creation raise exception.
     }
 }
 
@@ -431,18 +440,27 @@
 {
     NM_FUNCTION;
 
-    XQApplicationManager appManager;
-    XQAiwRequest* request = appManager.create(
-            XQI_EMAIL_MESSAGE_VIEW, XQOP_EMAIL_MESSAGE_VIEW,
-            false);
-    
-    if (request) {
-        QList<QVariant> list;
-        list.append(QVariant(mMailboxId.id()));
-        list.append(QVariant(mFolderId.id()));
-        list.append(QVariant(messageId.id()));
-    
-        request->setArguments(list);
-        request->send();
+    QT_TRY{
+        XQApplicationManager appManager;
+        XQAiwRequest* request = appManager.create(
+                XQI_EMAIL_MESSAGE_VIEW, XQOP_EMAIL_MESSAGE_VIEW,
+                false);
+        
+        if (request) {
+            QList<QVariant> list;
+            list.append(QVariant(mMailboxId.id()));
+            list.append(QVariant(mFolderId.id()));
+            list.append(QVariant(messageId.id()));
+        
+            request->setSynchronous(true);
+            request->setArguments(list);
+            request->send();
+            delete request;
+        }
+    }
+    QT_CATCH(...){
+        // no actions taken.
+        // try-catch mechanism added to avoid crashing widget, in case XQAiwRequest
+        // creation raise exception.
     }
 }
--- a/emailuis/nmhswidget/src/nmhswidgetemailrow.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/src/nmhswidgetemailrow.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -19,10 +19,10 @@
 #include <hbdocumentloader.h>
 #include <hblabel.h>
 #include <hbextendedlocale.h>
-#include <HbFrameDrawer>
-#include <HbFrameItem>
-#include <HbColorScheme>
-#include <HbEvent>
+#include <hbframedrawer.h>
+#include <hbframeitem.h>
+#include <hbcolorscheme.h>
+#include <hbevent.h>
 #include "nmicons.h"
 #include "nmcommon.h"
 #include "nmhswidgetemailrow.h"
@@ -36,7 +36,8 @@
     mTimeLabel(0), 
     mNewMailIcon(0),
     mSeparatorIcon(0), 
-    mMessageId(0)
+    mMessageId(0),
+    mBackgroundLayoutItem(0)
 {
     NM_FUNCTION;
 }
@@ -59,17 +60,31 @@
 
 }
 
+/*
+ Setup email row ui
+  Must be called after constructor.
+   /return true if loading succeeded, otherwise false. False indicates that object is unusable.
+ */
+bool NmHsWidgetEmailRow::setupUI()
+    {
+    NM_FUNCTION;
+    
+    if(!loadDocML() || !setupGraphics()){
+        return false;
+    }
+    return true;
+    }
+
+
+
 /*!
- Loads layout data and child items from docml file
- Must be called after constructor.
+ Loads layout data and child items from docml file 
   /return true if loading succeeded, otherwise false. False indicates that object is unusable.
  */
 bool NmHsWidgetEmailRow::loadDocML()
 {
     NM_FUNCTION;
-    
-    HbFrameDrawer* backgroundFrameDrawer = 0;
-    HbFrameItem* backgroundLayoutItem = 0;
+
     QT_TRY{   
         // Use document loader to load the contents
         HbDocumentLoader loader;
@@ -120,28 +135,57 @@
         }
         //Verify all mStatusIcons
         for (int i = 0; i < mStatusIcons.length(); i++) {
-            if (!mStatusIcons[i]) {
+            if (!mStatusIcons.at(i)) {
                 return false;
             }
         }
+        
+        return true;
+    }
+    QT_CATCH(...){
+        return false;
+    }
+}
+
+/*
+ Setup graphics that cannot be loaded from docml.
+  /return true if loading succeeded, otherwise false. False indicates that object is unusable.
+ */
+bool NmHsWidgetEmailRow::setupGraphics()
+    {
+    NM_FUNCTION;
     
+    HbFrameDrawer* newMailIconFrameDrawer = 0;
+    HbFrameItem* newMailIconFrameItem = 0;
+    HbFrameDrawer* backgroundFrameDrawer = 0;
+    QT_TRY{ 
         //separator icon
         HbIcon separatorIcon("qtg_graf_divider_h_thin");
         mSeparatorIcon->setIcon(separatorIcon);
         
         //new email icon
-        backgroundFrameDrawer = new HbFrameDrawer("qtg_fr_list_new_item",
+        newMailIconFrameDrawer = new HbFrameDrawer("qtg_fr_list_new_item",
             HbFrameDrawer::ThreePiecesVertical);
-        backgroundLayoutItem = new HbFrameItem(backgroundFrameDrawer);
-        mNewMailIcon->setBackgroundItem(backgroundLayoutItem);
-    
+        newMailIconFrameItem = new HbFrameItem(newMailIconFrameDrawer);
+        mNewMailIcon->setBackgroundItem(newMailIconFrameItem);
+        
         //hide all the icons first to avoid blinking
         hideIcons();
     
+        //pressed background
+        backgroundFrameDrawer = new HbFrameDrawer("qtg_fr_hsitems_pressed", HbFrameDrawer::NinePieces);
+        mBackgroundLayoutItem = new HbFrameItem( backgroundFrameDrawer );
+        setBackgroundItem( mBackgroundLayoutItem );
+        mBackgroundLayoutItem->hide();
+            
         return true;
     }
     QT_CATCH(...){
-        if(!backgroundLayoutItem && backgroundFrameDrawer){
+        if(!newMailIconFrameItem && newMailIconFrameDrawer){
+            delete newMailIconFrameDrawer;
+            newMailIconFrameDrawer = NULL;
+        }
+        if(!mBackgroundLayoutItem && backgroundFrameDrawer){
             delete backgroundFrameDrawer;
             backgroundFrameDrawer = NULL;
         }
@@ -183,7 +227,7 @@
     
     //set fonts color and size
     setFontsSize(mEnvelope.isRead());
-    setFontsColor(false);
+    setHighlighedFontsColor(false);
     }
 
 /*!
@@ -216,7 +260,7 @@
 {
     NM_FUNCTION;
     for (int i = 0; i < mStatusIcons.count(); i++) {
-        mStatusIcons[i]->hide();
+        mStatusIcons.at(i)->hide();
     }
     mNewMailIcon->hide();
 }
@@ -262,8 +306,8 @@
 
     // Here we show icons added to the iconList in the order they have been added.
     for (int count = 0; count < iconList.count(); count++) {
-        mStatusIcons[count]->setIcon(iconList[count]);
-        mStatusIcons[count]->show();
+        mStatusIcons.at(count)->setIcon(iconList.at(count));
+        mStatusIcons.at(count)->show();
     }
 }
 
@@ -298,10 +342,11 @@
 
 /*!
     sets fonts color.
+    /param bool pressed indicates if row is pressed down or not
 */
-void NmHsWidgetEmailRow::setFontsColor( bool pressed )
+void NmHsWidgetEmailRow::setHighlighedFontsColor( bool pressed )
     {
-    NM_FUNCTION;;
+    NM_FUNCTION;
     QColor newFontColor;
     
     if(pressed){
@@ -319,6 +364,21 @@
     mTimeLabel->setTextColor(newFontColor);
     }
 
+/*!
+    change background highlight
+    /param bool show if true then shown, false hide
+*/
+void NmHsWidgetEmailRow::showHighlight( bool show )
+    {
+    NM_FUNCTION;
+    
+    if(show){
+        mBackgroundLayoutItem->show();
+    }
+    else{
+        mBackgroundLayoutItem->hide();
+    }
+    }
 
 /*!
  mousePressEvent(QGraphicsSceneMouseEvent *event)
@@ -327,7 +387,8 @@
 {
     NM_FUNCTION;
     Q_UNUSED(event); 
-    setFontsColor(true);
+    setHighlighedFontsColor(true);
+    showHighlight(true);
 }
 
 /*!
@@ -337,7 +398,8 @@
 {
     NM_FUNCTION;
     Q_UNUSED(event);
-    setFontsColor(false);
+    setHighlighedFontsColor(false);
+    showHighlight(false);
     emit mailViewerLaunchTriggered(mMessageId);
 }
 
@@ -349,7 +411,7 @@
     NM_FUNCTION;
     QEvent::Type eventType = event->type();
     if( eventType == HbEvent::ThemeChanged ){
-        setFontsColor(false);
+        setHighlighedFontsColor(false);
         return true;
     }
     return HbWidget::event(event);
--- a/emailuis/nmhswidget/src/nmhswidgettitlerow.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/src/nmhswidgettitlerow.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -22,6 +22,8 @@
 #include <HbPushButton>
 #include <HbColorScheme>
 #include <HbEvent>
+#include <hbframedrawer.h>
+#include <hbframeitem.h>
 #include "nmicons.h"
 #include "nmhswidgettitlerow.h"
 #include "nmhswidgetconsts.h"
@@ -34,7 +36,8 @@
     mUnreadCountLabel(0),
     mCollapseExpIconLabel(0), 
     mAccountName(),
-    mUnreadCount(0)
+    mUnreadCount(0),
+    mBackgroundLayoutItem(0)
 {
     NM_FUNCTION;
 }
@@ -44,9 +47,46 @@
  */
 NmHsWidgetTitleRow::~NmHsWidgetTitleRow()
 {
+    NM_FUNCTION; 
+}
+
+/*!
+ \fn QPainterPath NmHsWidgetTitleRow::shape()
+
+ Called by home screen fw to check widget boundaries, needed to draw
+ outside widget boundingRect.
+ /return QPainterPath path describing actual boundaries of widget 
+  including child items
+ */
+QPainterPath NmHsWidgetTitleRow::shape() const
+{
     NM_FUNCTION;
+    
+    QPainterPath path;
+    path.setFillRule(Qt::WindingFill);
+    
+    path.addRect(this->geometry());
+    if (mMailboxIcon){
+        path.addRect(mMailboxIcon->geometry());
+    }    
+    return path.simplified();
 }
 
+/*
+ Setup email row ui
+  Must be called after constructor.
+   /return true if loading succeeded, otherwise false. False indicates that object is unusable.
+ */
+bool NmHsWidgetTitleRow::setupUI()
+    {
+    NM_FUNCTION;
+
+    if(!loadDocML() || !setupGraphics()){
+        return false;
+    }
+    return true;
+    }
+
 /*!
  Loads layout data and child items from docml file. Must be called after constructor.
  /return true if loading succeeded, otherwise false. False indicates that object is unusable
@@ -92,13 +132,10 @@
             NM_ERROR(1,"NmHsWidgetTitleRow::loadDocML Fail @ icons & labels");
             return false;
         }
-    
-        //Expand collapse button
+		
+		//Expand collapse button
         connect(mCollapseExpIconLabel, SIGNAL(clicked()), this, SIGNAL(expandCollapseButtonPressed()));
-        
-        //set fonts color
-        setFontsColor(false);
-
+		
         return true;
     }
     QT_CATCH(...){
@@ -106,6 +143,39 @@
     }
 }
 
+/*
+ Setup graphics that cannot be loaded from docml.
+  /return true if loading succeeded, otherwise false. False indicates that object is unusable.
+ */
+bool NmHsWidgetTitleRow::setupGraphics()
+    {
+    NM_FUNCTION;
+    
+    HbFrameDrawer* backgroundFrameDrawer = 0;
+    QT_TRY{
+        //pressed background
+        backgroundFrameDrawer = new HbFrameDrawer("qtg_fr_hsitems_pressed", HbFrameDrawer::NinePieces);
+        mBackgroundLayoutItem = new HbFrameItem( backgroundFrameDrawer );
+        setBackgroundItem( mBackgroundLayoutItem );
+		mBackgroundLayoutItem->hide();
+        
+        //set fonts color
+		setHighlighedFontsColor(false);
+
+        return true;
+    }
+    QT_CATCH(...){
+        if(!mBackgroundLayoutItem && backgroundFrameDrawer){
+            delete backgroundFrameDrawer;
+            backgroundFrameDrawer = NULL;
+        }
+
+        return false;
+    }
+    
+    }
+
+
 /*!
  Slot for updating account name, calls updateData to update ui.
  */
@@ -173,9 +243,9 @@
 
 /*!
     sets fonts color.
-    param bool pressed indicates if row is pressed down or not
+    /param bool pressed indicates if row is pressed down or not
 */
-void NmHsWidgetTitleRow::setFontsColor( bool pressed )
+void NmHsWidgetTitleRow::setHighlighedFontsColor( bool pressed )
     {
     NM_FUNCTION;
     QColor newFontColor;
@@ -191,6 +261,21 @@
     mUnreadCountLabel->setTextColor(newFontColor);
     }
 
+/*!
+    change background pressed state
+    /param bool show if true then shown, false hide
+*/
+void NmHsWidgetTitleRow::showHighlight( bool show )
+    {
+    NM_FUNCTION;;
+    
+    if(show){
+        mBackgroundLayoutItem->show();
+    }
+    else{
+        mBackgroundLayoutItem->hide();
+    }
+    }
 
 /*!
  mousePressEvent(QGraphicsSceneMouseEvent *event)
@@ -198,8 +283,14 @@
 void NmHsWidgetTitleRow::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
     NM_FUNCTION;
-    Q_UNUSED(event); 
-    setFontsColor(true);
+	
+	//to avoid opening email account mistakenly  when tabbing expand/collapse button
+	//we dont handle events that are on the top, down or right side of the button
+    if(event->pos().x() < mUnreadCountLabel->geometry().right())
+        {
+        setHighlighedFontsColor(true);
+        showHighlight(true);
+        }
 }
 
 /*!
@@ -208,9 +299,15 @@
 void NmHsWidgetTitleRow::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
     NM_FUNCTION;
-    Q_UNUSED(event);
-    setFontsColor(false);
-    emit mailboxLaunchTriggered();
+	
+	//to avoid opening email account mistakenly when tabbing expand/collapse button
+	//we dont handle events that are on the top, down or right side of the button
+    if(event->pos().x() < mUnreadCountLabel->geometry().right())
+        {
+        setHighlighedFontsColor(false);
+        showHighlight(false);
+        emit mailboxLaunchTriggered();
+        }
 }
 
 /*
@@ -221,7 +318,7 @@
     NM_FUNCTION;
     QEvent::Type eventType = event->type();
     if( eventType == HbEvent::ThemeChanged ){
-        setFontsColor(false);
+        setHighlighedFontsColor(false);
         return true;
     }
     return HbWidget::event(event);
--- a/emailuis/nmhswidget/translations/mailwidget.ts	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmhswidget/translations/mailwidget.ts	Thu Jun 24 14:32:18 2010 +0300
@@ -2,14 +2,24 @@
 <!DOCTYPE TS>
 <TS version="3.0" sourcelanguage="en_GB">
 <context>
+<message numerus="no" id="txt_mail_widget_info_no_messages">
+    <comment>Layout ID parent (no children). Same text than in Mail client when mailbox is empty. Informs user that she does not have mail in the Inbox.</comment>        
+    <source>(No messages)</source>
+    <translation variants="no" type="unfinished"></translation>
+    <extra-loc-layout_id>txt_mail_widget_info_no_messages</extra-loc-layout_id>    
+    <extra-loc-viewid>Mail widget_04, Mail widget_P04, Mail widget_L04</extra-loc-viewid>
+    <extra-loc-positionid>info</extra-loc-positionid>
+    <extra-loc-feature>Ma</extra-loc-feature>
+    <extra-loc-blank>False</extra-loc-blank>
+</message>
 <message numerus="no" id="txt_mail_widget_list_l1">
-    <comment>New mail count in parenthesis after the Mail box name which is the title of the widget. Max number shown 999.</comment>        
+    <comment>Layout ID parent (No children). New mail count in parenthesis after the Mail box name which is the title of the widget. Min number 1 and max number shown 999. Number or brackets are not shown at all if mailbox do not have any new mail. Example in Mail widget_L08.</comment>        
     <source>(%L1)</source>
     <translation variants="no" type="unfinished"></translation>
-    <extra-loc-layout_id>qtl_list_tiny</extra-loc-layout_id>    
+    <extra-loc-layout_id>txt_mail_widget_list_l1</extra-loc-layout_id>    
     <extra-loc-viewid>Mail Widget</extra-loc-viewid>
     <extra-loc-positionid>List</extra-loc-positionid>
-    <extra-loc-feature>Mail Widget</extra-loc-feature>
+    <extra-loc-feature>Ma</extra-loc-feature>
     <extra-loc-blank>False</extra-loc-blank>
 </message>
 </context>
--- a/emailuis/nmsettingui/src/nmmailboxsettingsmanager.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/emailuis/nmsettingui/src/nmmailboxsettingsmanager.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -152,7 +152,7 @@
             pluginInstance->disconnect(SIGNAL(mailboxPropertyChanged(const NmId &, QVariant, QVariant)));
             pluginInstance->disconnect(SIGNAL(goOnline(const NmId &)));
             pluginInstance->disconnect(SIGNAL(goOffline(const NmId &)));
-            pluginInstance->disconnect(SIGNAL(aboutToClose()));
+            pluginInstance->disconnect(this, SIGNAL(aboutToClose()), pluginInstance, SLOT(aboutToClose()));
 
             connect(pluginInstance, SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)),
                 this, SIGNAL(mailboxListChanged(const NmId &, NmSettings::MailboxEventType)));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/emailshutdownconst.h	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Constant definitions for Email shutdown
+*
+*/
+
+#ifndef EMAILSHUTDOWNCONST_H
+#define EMAILSHUTDOWNCONST_H
+
+#include <e32cmn.h>                 // TUid
+#include "emailshutdownconst.hrh"   // KEmailShutdownUidAsTInt
+
+
+// Publish & Subscribe category for Email shutdown events
+const TUid KEmailShutdownPsCategory = { KEmailShutdownUidAsTInt };
+
+// Size of one item in platform API UID list (in Publish & Subscribe
+// key EEmailPsKeyPlatformApiAppsToClose)
+const TInt KEmailPlatformApiUidItemSize = sizeof( TInt32 );
+
+// Publish & Subscribe keys used in shutdown process
+enum TEmailShutdownPsKeys
+    {
+    // Publish & Subscribe key used in communication between Shutter
+    // application and installation initiators
+    EEmailPsKeyInstallationStatus = 1,
+    
+    // Publish & Subscribe keys for Email shutdown events
+    EEmailPsKeyShutdownClients,
+    EEmailPsKeyShutdownPlugins,
+    EEmailPsKeyShutdownMsgStore,
+    
+    // Publish & Subscribe keys to register 3rd party applications to be closed
+    EEmailPsKeyPlatformApiAppsToCloseLength,
+    EEmailPsKeyPlatformApiAppsToClose
+    };
+
+// Publish & Subscribe values to be used with key EEmailPsKeyInstallationStatus
+enum TEmailShutdownPsInstallationValues
+    {
+    // Value to be set by installation initiators when installation is starting
+    EEmailPsValueInstallationStarting = 1,
+    // Value to be set by Shutter when all services are shutdown
+    EEmailPsValueInstallationOkToStart,
+    // Value to be set by installation initiators when installation is started
+    // after EEmailPsValueInstallationOkToStart event received
+    EEmailPsValueInstallationStarted,
+    // Value to be set by Starter when installation has finished
+    EEmailPsValueInstallationFinished
+    };
+
+// Executable name of the process that implements the shutdown functionality
+_LIT( KEmailShutdownHandlerExe, "emailservermonitor.exe" );
+
+// Command line arguments that can be given to shutdown handler process when
+// starting it
+
+// KEmailShutdownHandlerArgOnlyShutter should be used when starting the process
+// just before starting installation (if it wasn't already running)
+_LIT( KEmailShutdownHandlerArgOnlyShutter, "OnlyShutter" );
+
+// KEmailShutdownHandlerArgRestart should be given when restarting
+// the process after installation
+_LIT( KEmailShutdownHandlerArgRestart, "RestartAfterInstallation" );
+
+
+#endif // EMAILSHUTDOWNCONST_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/emailshutdownconst.hrh	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Constant definitions for Cmail shutdown
+*
+*/
+
+#ifndef EMAILSHUTDOWNCONST_HRH
+#define EMAILSHUTDOWNCONST_HRH
+
+
+// Publish & Subscribe category for Cmail shutdown events, needs to be the
+// same as UID of the process that implements the shutdown functionality
+#define KEmailShutdownUidAsTInt 0x20025FAD
+
+// Executable name of the process that implements the shutdown functionality
+#define KEmailShutdownProcessExeName emailservermonitor.exe
+
+
+#endif // EMAILSHUTDOWNCONST_HRH
--- a/ipsservices/ipssosaoplugin/src/IpsSosAOImapAgent.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosaoplugin/src/IpsSosAOImapAgent.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -33,7 +33,7 @@
 //<QMail>
 #include "IpsSosAOSettingsHandler.h"
 
-const TInt KIpsSetDataHeadersOnly           = -2;
+//<qmail> removed
 //</QMail>
 
 // from ipsplugin
@@ -368,10 +368,16 @@
 void CIpsSosAOImapAgent::CancelAllAndDisconnectL()
     {
     FUNC_LOG;
+    // if we are already idle state, do nothing,
+    // completing in idle state might cause unvanted events to ui
+    if (iState == EStateIdle) 
+        {
+        return;
+        }
+    
     iDoNotDisconnect = EFalse;
     iState = EStateCompleted;
     iFoldersArray.Reset();
-
     if ( IsActive() )
         {
         Cancel();
--- a/ipsservices/ipssosaoplugin/src/IpsSosAOPopAgent.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosaoplugin/src/IpsSosAOPopAgent.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -302,6 +302,13 @@
 void CIpsSosAOPopAgent::CancelAllAndDisconnectL()
     {
     FUNC_LOG;
+    // if we are already idle state, do nothing
+    // completing in idle state might cause unvanted events to ui
+    if (iState == EStateIdle) 
+        {
+        return;
+        }
+    
     iDoNotDisconnect = EFalse;
     iState = EStateCompleted;
     if ( IsActive() )
--- a/ipsservices/ipssosplugin/inc/ipsplgcommon.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosplugin/inc/ipsplgcommon.h	Thu Jun 24 14:32:18 2010 +0300
@@ -35,7 +35,11 @@
 const TUid KIpsPlgPropertyCatUid  = { IPS_PROPERTY_CAT_UID };
 
 const TInt KIpsPlgMaxPhoneIdLength  = 50;
-
+//<qmail>
+const TInt KIpsSetDataHeadersOnly           = -2;
+const TInt KIpsSetDataFullBodyAndAttas      = -1;
+const TInt KIpsSetDataFullBodyOnly          = -3;
+//</qmail>
 const TInt KContinueInterval = 3000000; // 3 sec
 
 static _LIT_SECURITY_POLICY_PASS( KAllowAllPolicy );
--- a/ipsservices/ipssosplugin/inc/ipsplgimap4connectop.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosplugin/inc/ipsplgimap4connectop.h	Thu Jun 24 14:32:18 2010 +0300
@@ -91,6 +91,17 @@
      * Returns operation type
      */
     TIpsOpType IpsOpType() const;
+    
+    //<qmail> moved from private to public and changed to static
+    /**
+     * 
+     * @param aInfo is filled correctly in this function
+     * @param aImap4Settings info is filled partly based on settings
+     */
+    static void ConstructImapPartialFetchInfo(
+        TImImap4GetPartialMailInfo& aInfo, 
+        const CImImap4Settings& aImap4Settings );
+    //</qmail>
         
     // <qmail> HandleImapConnectionEvent() not used any more
 
@@ -156,15 +167,7 @@
      */
     void SignalSyncCompleted( TInt aError );
     
-    // <qmail>
-    /**
-     * 
-     * @param aInfo is filled corretcly in this function
-     * @param aImap4Settings info is filled partly based on settings
-     */
-    void ConstructImapPartialFetchInfo(
-        TImImap4GetPartialMailInfo& aInfo, 
-        const CImImap4Settings& aImap4Settings );
+    // <qmail> moved to public
 
     /**
      * GetImapSettingsLC()
--- a/ipsservices/ipssosplugin/src/ipsplgimap4connectop.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosplugin/src/ipsplgimap4connectop.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -19,11 +19,7 @@
 #include "emailtrace.h"
 #include "ipsplgheaders.h"
 
-// <qmail>
-const TInt KIpsSetDataHeadersOnly           = -2;
-const TInt KIpsSetDataFullBodyAndAttas      = -1;
-const TInt KIpsSetDataFullBodyOnly          = -3;
-// </qmail>
+// <qmail> removed
 
 // <qmail> KIpsPlgIpsConnPanic removed
 
@@ -488,12 +484,14 @@
         }
     else
         {
+    //<qmail> include html in body
         aInfo.iTotalSizeLimit = sizeLimit*1024; 
         aInfo.iAttachmentSizeLimit = 0;
         aInfo.iMaxEmailSize = sizeLimit*1024;
         aInfo.iBodyTextSizeLimit = sizeLimit*1024;
         aInfo.iPartialMailOptions = EBodyAlternativeText;
         aInfo.iGetMailBodyParts = EGetImap4EmailBodyAlternativeText;
+    // </qmail>    
         }
     }
 
--- a/ipsservices/ipssosplugin/src/ipsplgimap4plugin.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosplugin/src/ipsplgimap4plugin.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -578,15 +578,14 @@
     accounts->GetImapAccountL( aMailboxId.Id(), imapAcc );
     accounts->LoadImapSettingsL( imapAcc, *settings );
     TImImap4GetPartialMailInfo info;
-// <qmail>	
-    info.iPartialMailOptions = ENoSizeLimits;
-    //CIpsSetDataApi::ConstructImapPartialFetchInfo( info, *settings );
+// <qmail> Get TImImap4GetPartialMailInfo based on settings
+    CIpsPlgImap4ConnectOp::ConstructImapPartialFetchInfo( info, *settings );
     CleanupStack::PopAndDestroy( 2, settings );
-    /*
+
     if ( info.iTotalSizeLimit == KIpsSetDataHeadersOnly )
         {
         return;
-        }*/
+        }
 // </qmail>
     
     TPckgBuf<TImImap4GetPartialMailInfo> package(info);
--- a/ipsservices/ipssosplugin/src/ipsplgmsgmapper.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosplugin/src/ipsplgmsgmapper.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -408,15 +408,14 @@
 
     TMsvEmailEntry tEntry( cEntry->Entry() );
     TBool isModified = ChangeTEntryFlagsL( tEntry, aMessage );
-
+    // <qmail>
     if ( isModified )
         {
-// <qmail> Function called sync in Qmail
         cEntry->ChangeL( tEntry );
-// </qmail>
         }
 
     CleanupStack::PopAndDestroy( cEntry );
+    // </qmail>
     }
 
 // ---------------------------------------------------------------------------
@@ -1509,24 +1508,21 @@
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // <cmail>
-void CIpsPlgMsgMapper::SetAttachmentFlagL( const TMsvEmailEntry& aEntry,
-										   TBool aHasAttachment )
+void CIpsPlgMsgMapper::SetAttachmentFlagL( const TMsvEmailEntry& /*aEntry*/,
+										   TBool /*aHasAttachment*/ )
 	{
 	FUNC_LOG;
-	CMsvEntry* cEntry = iSession.GetEntryL( aEntry.Id() );
+	// <qmail> commented out, causing freeze in message list
+	/*CMsvEntry* cEntry = iSession.GetEntryL( aEntry.Id() );
 	CleanupStack::PushL( cEntry );
 	// Only text/calendar part included as attachment
 	TMsvEmailEntry entryToBeChanged( aEntry );
 	entryToBeChanged.SetAttachment( aHasAttachment );
 
-// <qmail> Function called sync in Qmail
 	cEntry->ChangeL( entryToBeChanged );
-	CleanupStack::PopAndDestroy( cEntry );
+	CleanupStack::PopAndDestroy( cEntry );*/
 // </qmail>
 	}
-// </cmail>
-
-// <cmail>
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 void CIpsPlgMsgMapper::GetCharsetParameterL(
--- a/ipsservices/ipssosplugin/src/ipsplgpop3plugin.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/ipssosplugin/src/ipsplgpop3plugin.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -19,6 +19,7 @@
 #include "emailtrace.h"
 #include "ipsplgheaders.h"
 
+//<qmail> removed
 
 // ---------------------------------------------------------------------------
 // CIpsPlgPop3Plugin::CIpsPlgPop3Plugin
@@ -164,12 +165,11 @@
     TInt populationLimit( settings->PopulationLimit() );
     CleanupStack::PopAndDestroy( 2, settings );   // >>> settings, accounts
     TBool forcePopulate( EFalse );
-// <qmail>
-    /*
+// <qmail> back to use
     if( populationLimit != KIpsSetDataHeadersOnly )
         {
         forcePopulate = ETrue;
-        }*/
+        }
 // </qmail>
     
     CIpsPlgBaseOperation* op = CIpsPlgPop3ConnectOp::NewL( 
--- a/ipsservices/nmipssettings/inc/nmipssettingshelper.h	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/nmipssettings/inc/nmipssettingshelper.h	Thu Jun 24 14:32:18 2010 +0300
@@ -104,7 +104,6 @@
     void incomingMailServerTextChange(const QString &text);
     void saveOutgoingMailServer();
     void outgoingMailServerTextChange(const QString &text);
-    void handleModelDataChange(QModelIndex startIn, QModelIndex endIn);
     void incomingPortChange(int index);
     void incomingSecureConnectionItemChange(int index);
     void folderPathChange(int index);
--- a/ipsservices/nmipssettings/src/nmipssettingshelper.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/nmipssettings/src/nmipssettingshelper.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -312,9 +312,9 @@
                     // refreshPeriodModified method needs to be updated also.
                     QStringList refreshMailItems;
                     refreshMailItems << hbTrId("txt_mailips_setlabel_val_keep_uptodate")
-                                     << hbTrId("txt_mailips_setlabel_val_every_15_minutes")
-                                     << hbTrId("txt_mailips_setlabel_val_every_1_hour")
-                                     << hbTrId("txt_mailips_setlabel_val_every_4_hours");
+                                     << HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_every_15_minutes"))
+                                     << HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_every_1_hour"))
+                                     << HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_every_4_hours"));
                     formItemData->setContentWidgetData("items", refreshMailItems);
                     mDataForm.addConnection(
                         formItemData, SIGNAL(valueChanged(QPersistentModelIndex, QVariant)),
@@ -816,37 +816,6 @@
     mCurrentLineEditChanged = true;
 }
 
-void NmIpsSettingsHelper::handleModelDataChange(QModelIndex startIn, QModelIndex endIn)
-{
-    Q_UNUSED(endIn);
-    HbDataFormModelItem *item = mDataFormModel.itemFromIndex(startIn);
-    
-    if(item == mContentItems.value(IpsServices::IncomingSecureSockets)) {
-        QVariant data = item->contentWidgetData("selected");
-        incomingSecureConnectionItemChange(data.toInt());
-    }
-    else if(item == mContentItems.value(IpsServices::IncomingPort)) {
-        QVariant data = item->contentWidgetData("selected");
-        incomingPortChange(data.toInt());
-    }
-    else if(item == mContentItems.value(IpsServices::OutgoingSecureSockets)) {
-        QVariant data = item->contentWidgetData("selected");
-        outgoingSecureConnectionItemChange(data.toInt());
-    }
-    else if(item == mContentItems.value(IpsServices::OutgoingPort)) {
-        QVariant data = item->contentWidgetData("selected");
-        outgoingPortChange(data.toInt());
-    }
-    else if(item == mContentItems.value(IpsServices::SMTPAuthentication)) {
-        QVariant data = item->contentWidgetData("selected");
-        outgoingAuthenticationChange(data.toInt());
-    }
-    else if(item == mContentItems.value(IpsServices::FolderPath)) {
-        QVariant data = item->contentWidgetData("selected");
-        folderPathChange(data.toInt());
-    }
-}
-
 /*!
     Saves the incoming port value into database if user has changed the value. If the user wish to
     define the port, a input dialog is shown.
@@ -856,15 +825,15 @@
 {
     int previousindex = getCorrectIncomingPortRadioButtonIndex();
     
-    if (previousindex != index ) {
-        if (index == IpsServices::NmIpsSettingsDefault) {
+    if (index == IpsServices::NmIpsSettingsDefault) {
+        if (index != previousindex) {
             emit goOffline(mSettingsManager.mailboxId());
             mEmitOnline = true;
             int port = mSettingsManager.determineDefaultIncomingPort();
-            mSettingsManager.writeSetting(IpsServices::IncomingPort, port);
-        } else if (index == IpsServices::NmIpsSettingsUserDefined) {
-            showIncomingPortInputDialog();
-        }  
+            mSettingsManager.writeSetting(IpsServices::IncomingPort, port);    
+        }
+    } else if (index == IpsServices::NmIpsSettingsUserDefined) {
+        showIncomingPortInputDialog();
     }
 }
 
@@ -1030,14 +999,14 @@
 void NmIpsSettingsHelper::folderPathChange(int index)
 {
     int previousindex = getCorrectFolderPathRadioButtonIndex();
-    
-    if (previousindex != index ) {
-        if (index == IpsServices::NmIpsSettingsDefault) {
+        
+    if (index == IpsServices::NmIpsSettingsDefault) {
+        if (index != previousindex ) {
             // Empty string sets the folder path to default.
-            mSettingsManager.writeSetting(IpsServices::FolderPath, "");
-        } else if (index == IpsServices::NmIpsSettingsUserDefined) {
-            showFolderPathInputDialog();       
+            mSettingsManager.writeSetting(IpsServices::FolderPath, "");    
         }
+    } else if (index == IpsServices::NmIpsSettingsUserDefined) {
+        showFolderPathInputDialog();       
     }
 }
 
@@ -1136,10 +1105,10 @@
 void NmIpsSettingsHelper::refreshPeriodModified(QPersistentModelIndex, QVariant value)
 {
     QMap<QString, int> conversionTable;
-    conversionTable[hbTrId("txt_mailips_setlabel_val_keep_uptodate")] = 5;
-    conversionTable[hbTrId("txt_mailips_setlabel_val_every_15_minutes")] = 15;
-    conversionTable[hbTrId("txt_mailips_setlabel_val_every_1_hour")] = 60;
-    conversionTable[hbTrId("txt_mailips_setlabel_val_every_4_hours")] = 240;
+    conversionTable[HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_keep_uptodate"))] = 5;
+    conversionTable[HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_every_15_minutes"))] = 15;
+    conversionTable[HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_every_1_hour"))] = 60;
+    conversionTable[HbStringUtil::convertDigits(hbTrId("txt_mailips_setlabel_val_every_4_hours"))] = 240;
 
     int selectedValue(conversionTable.value(value.toString()));
     QVariant previouslySelectedValue;
@@ -1314,15 +1283,15 @@
 {
     int previousindex = getCorrectOutgoingPortRadioButtonIndex();
     
-    if (previousindex != index) {
-        if (index == IpsServices::NmIpsSettingsDefault) {
+    if (index == IpsServices::NmIpsSettingsDefault) {
+        if (index != previousindex) {
             emit goOffline(mSettingsManager.mailboxId());
             mEmitOnline = true;
             int port = mSettingsManager.determineDefaultOutgoingPort();
-            mSettingsManager.writeSetting(IpsServices::OutgoingPort, port);
-        } else if (index == IpsServices::NmIpsSettingsUserDefined) {
-            showOutgoingPortInputDialog();
+            mSettingsManager.writeSetting(IpsServices::OutgoingPort, port);    
         }
+    } else if (index == IpsServices::NmIpsSettingsUserDefined) {
+        showOutgoingPortInputDialog();
     }
 }
 
--- a/ipsservices/nmipssettings/src/nmipssettingsplugin.cpp	Fri Jun 11 16:42:02 2010 +0300
+++ b/ipsservices/nmipssettings/src/nmipssettingsplugin.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -99,13 +99,6 @@
 bool NmIpsSettingsPlugin::populateModel(HbDataFormModel &model,
     HbDataForm &form, const NmId &mailboxId)
 {
-    // Turns AlwaysOnline OFF
-    setAlwaysOnlineState(EServerAPIEmailTurnOff, mailboxId);
-    
-    // Store model and form pointers.
-    mModel = &model;
-    mForm = &form;
-
     // populateModel is called each time when a new settings view is created and this
     // plugin is destructed only after the mail settings is exited, so
     // SettingsManager and SettingsHelper needs to be deleted.
@@ -119,6 +112,13 @@
     // This plugin is only used when the mailbox is a IMAP or POP3 account.
     // Settings manager object is valid if the mailboxId is IMAP or POP3 account.
     if (mSettingsManager) {
+        // Turns AlwaysOnline OFF
+        setAlwaysOnlineState(EServerAPIEmailTurnOff, mailboxId);
+        
+        // Store model and form pointers.
+        mModel = &model;
+        mForm = &form;
+        
         // Create settings helper.
         mSettingsHelper = new NmIpsSettingsHelper(*mSettingsManager, form, model);
 
@@ -134,9 +134,6 @@
 
         connect(mSettingsHelper, SIGNAL(createUserDefinedMode()),
                 this, SLOT(createUserDefinedMode()));
-
-        connect(mModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), 
-                mSettingsHelper, SLOT(handleModelDataChange(QModelIndex, QModelIndex)));
         
         // Get the value if some ui items need to be hidden.
         QVariant data;
@@ -452,6 +449,8 @@
         mSettingsHelper->getCorrectIncomingSecureRadioButtonIndex();
     incomingSecureConnectionItem->setContentWidgetData(QString("selected"), 
                                                        incomingSecureConnectionItemIndex);
+    mForm->addConnection(incomingSecureConnectionItem, SIGNAL(itemSelected(int)),             
+            mSettingsHelper, SLOT(incomingSecureConnectionItemChange(int)));
     if (mHiddenItem) {
         incomingSecureConnectionItem->setEnabled(false);
     }
@@ -468,6 +467,8 @@
     incomingPortItem->setContentWidgetData(QString("items"), incomingPortItems);
     int incomingPortItemIndex = mSettingsHelper->getCorrectIncomingPortRadioButtonIndex(); 
     incomingPortItem->setContentWidgetData(QString("selected"), incomingPortItemIndex);
+    mForm->addConnection(incomingPortItem, SIGNAL(itemSelected(int)),
+        mSettingsHelper, SLOT(incomingPortChange(int)));
     if (mHiddenItem) {
         incomingPortItem->setEnabled(false);
     }
@@ -504,6 +505,8 @@
         mSettingsHelper->getCorrectOutgoingSecureRadioButtonIndex();
     outgoingSecureConnectionItem->setContentWidgetData(QString("selected"), 
                                                        outgoingSecureConnectionItemIndex);
+    mForm->addConnection(outgoingSecureConnectionItem, SIGNAL(itemSelected(int)),             
+            mSettingsHelper, SLOT(outgoingSecureConnectionItemChange(int)));
     if (mHiddenItem) {
         outgoingSecureConnectionItem->setEnabled(false);
     }
@@ -520,6 +523,8 @@
     outgoingPortItem->setContentWidgetData(QString("items"), outgoingPortItems);
     int outgoingPortItemIndex = mSettingsHelper->getCorrectOutgoingPortRadioButtonIndex(); 
     outgoingPortItem->setContentWidgetData(QString("selected"), outgoingPortItemIndex);
+    mForm->addConnection(outgoingPortItem, SIGNAL(itemSelected(int)),
+        mSettingsHelper, SLOT(outgoingPortChange(int)));
     if (mHiddenItem) {
         outgoingPortItem->setEnabled(false);
     }
@@ -538,6 +543,8 @@
     int outgoingAuthenticationIndex = 
         mSettingsHelper->getCorrectOutgoingAuthenticationRadioButtonIndex(); 
     outgoingAuthenticationItem->setContentWidgetData(QString("selected"), outgoingAuthenticationIndex);
+    mForm->addConnection(outgoingAuthenticationItem, SIGNAL(itemSelected(int)),
+        mSettingsHelper, SLOT(outgoingAuthenticationChange(int)));
     item.appendChild(outgoingAuthenticationItem);
     if (mHiddenItem) {
         outgoingAuthenticationItem->setEnabled(false);
@@ -559,6 +566,8 @@
         folderPathItem->setContentWidgetData(QString("items"), folderPathItems);
         int folderPathItemIndex = mSettingsHelper->getCorrectFolderPathRadioButtonIndex();
         folderPathItem->setContentWidgetData(QString("selected"), folderPathItemIndex);
+        mForm->addConnection(folderPathItem, SIGNAL(itemSelected(int)),
+            mSettingsHelper, SLOT(folderPathChange(int)));
         item.appendChild(folderPathItem);
     }
 }
--- a/nmail.pro	Fri Jun 11 16:42:02 2010 +0300
+++ b/nmail.pro	Thu Jun 24 14:32:18 2010 +0300
@@ -41,6 +41,7 @@
         emailservices/emailcommon \
         emailservices/emailframework \
         emailservices/emailstore \
+        emailservices/emailclientapi \
         ipsservices \
         emailuis/nmframeworkadapter \
         emailservices/nmclientapi \