From 48540940b6c28bb4378abfeb500ec45a625b37b6 Mon Sep 17 00:00:00 2001
From: Vadim Dashevskiy <watcherhd@gmail.com>
Date: Tue, 15 May 2012 10:38:20 +0000
Subject: initial commit

git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 plugins/YAMN/ChangeLog.txt                        |  243 ++
 plugins/YAMN/YAMN.dsp                             |  376 +++
 plugins/YAMN/YAMN.dsw                             |   65 +
 plugins/YAMN/YAMN.mak                             | 1736 +++++++++++++
 plugins/YAMN/YAMN.vcproj                          | 1593 ++++++++++++
 plugins/YAMN/YAMN_10.sln                          |   25 +
 plugins/YAMN/YAMN_10.vcxproj                      |  265 ++
 plugins/YAMN/YAMN_10.vcxproj.filters              |  143 ++
 plugins/YAMN/YAMN_9.vcproj                        |  915 +++++++
 plugins/YAMN/YAMNopts.cpp                         |    2 +
 plugins/YAMN/account.cpp                          | 1539 ++++++++++++
 plugins/YAMN/browser/badconnect.cpp               |  391 +++
 plugins/YAMN/browser/m_browser.h                  |   42 +
 plugins/YAMN/browser/mailbrowser.cpp              | 2692 +++++++++++++++++++++
 plugins/YAMN/debug.cpp                            |  142 ++
 plugins/YAMN/debug.h                              |   64 +
 plugins/YAMN/docs/InstallScript.xml               |   49 +
 plugins/YAMN/docs/YAMN-License.txt                |  340 +++
 plugins/YAMN/docs/YAMN-Readme.developers.txt      |  205 ++
 plugins/YAMN/docs/YAMN-Readme.txt                 |   79 +
 plugins/YAMN/docs/language.pop3.txt               |  118 +
 plugins/YAMN/docs/language.txt                    |   75 +
 plugins/YAMN/filter/Base/AggressiveOptimize.h     |  168 ++
 plugins/YAMN/filter/Base/Base.dsp                 |  108 +
 plugins/YAMN/filter/Base/Base.mak                 |  229 ++
 plugins/YAMN/filter/Base/debug.cpp                |   73 +
 plugins/YAMN/filter/Base/docs/base-readme.txt     |   63 +
 plugins/YAMN/filter/Base/maindll.cpp              |  238 ++
 plugins/YAMN/filter/Simple/AggressiveOptimize.h   |  168 ++
 plugins/YAMN/filter/Simple/docs/simple-readme.txt |   51 +
 plugins/YAMN/filter/Simple/maindll.cpp            |  132 +
 plugins/YAMN/filter/Simple/simple.dsp             |  105 +
 plugins/YAMN/filter/Simple/simple.mak             |  207 ++
 plugins/YAMN/filter/readme.txt                    |    1 +
 plugins/YAMN/filterplugin.cpp                     |  226 ++
 plugins/YAMN/icons/iconttbup.ico                  |  Bin 0 -> 1150 bytes
 plugins/YAMN/icons/icoyamn1.ico                   |  Bin 0 -> 1150 bytes
 plugins/YAMN/icons/icoyamn2.ico                   |  Bin 0 -> 1150 bytes
 plugins/YAMN/icons/proto_YAMN.dsp                 |   91 +
 plugins/YAMN/icons/proto_YAMN.mak                 |  112 +
 plugins/YAMN/icons/proto_YAMN.rc                  |   19 +
 plugins/YAMN/icons/proto_YAMN.vcproj              |  237 ++
 plugins/YAMN/icons/proto_YAMN_10.vcxproj          |  132 +
 plugins/YAMN/icons/proto_YAMN_10.vcxproj.filters  |   37 +
 plugins/YAMN/icons/resource.h                     |    2 +
 plugins/YAMN/include/IcoLib.h                     |   26 +
 plugins/YAMN/libs/unicows.lib                     |  Bin 0 -> 492376 bytes
 plugins/YAMN/mails/decode.cpp                     |  558 +++++
 plugins/YAMN/mails/m_decode.h                     |   25 +
 plugins/YAMN/mails/m_mails.h                      |  285 +++
 plugins/YAMN/mails/mails.cpp                      |  499 ++++
 plugins/YAMN/mails/mime.cpp                       |  732 ++++++
 plugins/YAMN/mails/test/header.txt                |   28 +
 plugins/YAMN/mails/test/header2.txt               |   97 +
 plugins/YAMN/mails/test/readme.txt                |    4 +
 plugins/YAMN/mails/test/test.cpp                  |   42 +
 plugins/YAMN/mails/test/test.dsp                  |  112 +
 plugins/YAMN/mails/test/test.dsw                  |   29 +
 plugins/YAMN/main.cpp                             |  824 +++++++
 plugins/YAMN/main.h                               |   66 +
 plugins/YAMN/mingw/base.dev                       |   69 +
 plugins/YAMN/mingw/base.win                       |   38 +
 plugins/YAMN/mingw/simple.dev                     |   59 +
 plugins/YAMN/mingw/simple.win                     |   35 +
 plugins/YAMN/mingw/yamn-2in1.dev                  |  469 ++++
 plugins/YAMN/mingw/yamn-2in1.win                  |   92 +
 plugins/YAMN/mingw/yamn-w9x.dev                   |  469 ++++
 plugins/YAMN/mingw/yamn-w9x.win                   |   92 +
 plugins/YAMN/mingw/yamn.dev                       |  469 ++++
 plugins/YAMN/mingw/yamn.win                       |   92 +
 plugins/YAMN/proto/md5.c                          |  260 ++
 plugins/YAMN/proto/md5.h                          |   27 +
 plugins/YAMN/proto/netclient.h                    |   22 +
 plugins/YAMN/proto/netlib.cpp                     |  278 +++
 plugins/YAMN/proto/netlib.h                       |   55 +
 plugins/YAMN/proto/pop3/pop3.cpp                  |  374 +++
 plugins/YAMN/proto/pop3/pop3.h                    |   66 +
 plugins/YAMN/proto/pop3/pop3comm.cpp              | 1636 +++++++++++++
 plugins/YAMN/proto/pop3/pop3comm.h                |   97 +
 plugins/YAMN/proto/pop3/pop3opt.cpp               | 1686 +++++++++++++
 plugins/YAMN/proto/pop3/pop3opt.h                 |   38 +
 plugins/YAMN/protoplugin.cpp                      |  258 ++
 plugins/YAMN/resources/YAMN.rc                    |  383 +++
 plugins/YAMN/resources/iconeutral.ico             |  Bin 0 -> 1150 bytes
 plugins/YAMN/resources/iconttbdown.ico            |  Bin 0 -> 1150 bytes
 plugins/YAMN/resources/icooffline.ico             |  Bin 0 -> 1150 bytes
 plugins/YAMN/resources/icoyamn3.ico               |  Bin 0 -> 1150 bytes
 plugins/YAMN/resources/resource.h                 |  130 +
 plugins/YAMN/resources/yamn.bmp                   |  Bin 0 -> 502 bytes
 plugins/YAMN/services.cpp                         |  541 +++++
 plugins/YAMN/synchro.cpp                          |  378 +++
 plugins/YAMN/version.h                            |    3 +
 plugins/YAMN/yamn.cpp                             |  478 ++++
 plugins/YAMN/yamn.h                               |  179 ++
 94 files changed, 25598 insertions(+)
 create mode 100644 plugins/YAMN/ChangeLog.txt
 create mode 100644 plugins/YAMN/YAMN.dsp
 create mode 100644 plugins/YAMN/YAMN.dsw
 create mode 100644 plugins/YAMN/YAMN.mak
 create mode 100644 plugins/YAMN/YAMN.vcproj
 create mode 100644 plugins/YAMN/YAMN_10.sln
 create mode 100644 plugins/YAMN/YAMN_10.vcxproj
 create mode 100644 plugins/YAMN/YAMN_10.vcxproj.filters
 create mode 100644 plugins/YAMN/YAMN_9.vcproj
 create mode 100644 plugins/YAMN/YAMNopts.cpp
 create mode 100644 plugins/YAMN/account.cpp
 create mode 100644 plugins/YAMN/browser/badconnect.cpp
 create mode 100644 plugins/YAMN/browser/m_browser.h
 create mode 100644 plugins/YAMN/browser/mailbrowser.cpp
 create mode 100644 plugins/YAMN/debug.cpp
 create mode 100644 plugins/YAMN/debug.h
 create mode 100644 plugins/YAMN/docs/InstallScript.xml
 create mode 100644 plugins/YAMN/docs/YAMN-License.txt
 create mode 100644 plugins/YAMN/docs/YAMN-Readme.developers.txt
 create mode 100644 plugins/YAMN/docs/YAMN-Readme.txt
 create mode 100644 plugins/YAMN/docs/language.pop3.txt
 create mode 100644 plugins/YAMN/docs/language.txt
 create mode 100644 plugins/YAMN/filter/Base/AggressiveOptimize.h
 create mode 100644 plugins/YAMN/filter/Base/Base.dsp
 create mode 100644 plugins/YAMN/filter/Base/Base.mak
 create mode 100644 plugins/YAMN/filter/Base/debug.cpp
 create mode 100644 plugins/YAMN/filter/Base/docs/base-readme.txt
 create mode 100644 plugins/YAMN/filter/Base/maindll.cpp
 create mode 100644 plugins/YAMN/filter/Simple/AggressiveOptimize.h
 create mode 100644 plugins/YAMN/filter/Simple/docs/simple-readme.txt
 create mode 100644 plugins/YAMN/filter/Simple/maindll.cpp
 create mode 100644 plugins/YAMN/filter/Simple/simple.dsp
 create mode 100644 plugins/YAMN/filter/Simple/simple.mak
 create mode 100644 plugins/YAMN/filter/readme.txt
 create mode 100644 plugins/YAMN/filterplugin.cpp
 create mode 100644 plugins/YAMN/icons/iconttbup.ico
 create mode 100644 plugins/YAMN/icons/icoyamn1.ico
 create mode 100644 plugins/YAMN/icons/icoyamn2.ico
 create mode 100644 plugins/YAMN/icons/proto_YAMN.dsp
 create mode 100644 plugins/YAMN/icons/proto_YAMN.mak
 create mode 100644 plugins/YAMN/icons/proto_YAMN.rc
 create mode 100644 plugins/YAMN/icons/proto_YAMN.vcproj
 create mode 100644 plugins/YAMN/icons/proto_YAMN_10.vcxproj
 create mode 100644 plugins/YAMN/icons/proto_YAMN_10.vcxproj.filters
 create mode 100644 plugins/YAMN/icons/resource.h
 create mode 100644 plugins/YAMN/include/IcoLib.h
 create mode 100644 plugins/YAMN/libs/unicows.lib
 create mode 100644 plugins/YAMN/mails/decode.cpp
 create mode 100644 plugins/YAMN/mails/m_decode.h
 create mode 100644 plugins/YAMN/mails/m_mails.h
 create mode 100644 plugins/YAMN/mails/mails.cpp
 create mode 100644 plugins/YAMN/mails/mime.cpp
 create mode 100644 plugins/YAMN/mails/test/header.txt
 create mode 100644 plugins/YAMN/mails/test/header2.txt
 create mode 100644 plugins/YAMN/mails/test/readme.txt
 create mode 100644 plugins/YAMN/mails/test/test.cpp
 create mode 100644 plugins/YAMN/mails/test/test.dsp
 create mode 100644 plugins/YAMN/mails/test/test.dsw
 create mode 100644 plugins/YAMN/main.cpp
 create mode 100644 plugins/YAMN/main.h
 create mode 100644 plugins/YAMN/mingw/base.dev
 create mode 100644 plugins/YAMN/mingw/base.win
 create mode 100644 plugins/YAMN/mingw/simple.dev
 create mode 100644 plugins/YAMN/mingw/simple.win
 create mode 100644 plugins/YAMN/mingw/yamn-2in1.dev
 create mode 100644 plugins/YAMN/mingw/yamn-2in1.win
 create mode 100644 plugins/YAMN/mingw/yamn-w9x.dev
 create mode 100644 plugins/YAMN/mingw/yamn-w9x.win
 create mode 100644 plugins/YAMN/mingw/yamn.dev
 create mode 100644 plugins/YAMN/mingw/yamn.win
 create mode 100644 plugins/YAMN/proto/md5.c
 create mode 100644 plugins/YAMN/proto/md5.h
 create mode 100644 plugins/YAMN/proto/netclient.h
 create mode 100644 plugins/YAMN/proto/netlib.cpp
 create mode 100644 plugins/YAMN/proto/netlib.h
 create mode 100644 plugins/YAMN/proto/pop3/pop3.cpp
 create mode 100644 plugins/YAMN/proto/pop3/pop3.h
 create mode 100644 plugins/YAMN/proto/pop3/pop3comm.cpp
 create mode 100644 plugins/YAMN/proto/pop3/pop3comm.h
 create mode 100644 plugins/YAMN/proto/pop3/pop3opt.cpp
 create mode 100644 plugins/YAMN/proto/pop3/pop3opt.h
 create mode 100644 plugins/YAMN/protoplugin.cpp
 create mode 100644 plugins/YAMN/resources/YAMN.rc
 create mode 100644 plugins/YAMN/resources/iconeutral.ico
 create mode 100644 plugins/YAMN/resources/iconttbdown.ico
 create mode 100644 plugins/YAMN/resources/icooffline.ico
 create mode 100644 plugins/YAMN/resources/icoyamn3.ico
 create mode 100644 plugins/YAMN/resources/resource.h
 create mode 100644 plugins/YAMN/resources/yamn.bmp
 create mode 100644 plugins/YAMN/services.cpp
 create mode 100644 plugins/YAMN/synchro.cpp
 create mode 100644 plugins/YAMN/version.h
 create mode 100644 plugins/YAMN/yamn.cpp
 create mode 100644 plugins/YAMN/yamn.h

(limited to 'plugins/YAMN')

diff --git a/plugins/YAMN/ChangeLog.txt b/plugins/YAMN/ChangeLog.txt
new file mode 100644
index 0000000000..6a85810ab2
--- /dev/null
+++ b/plugins/YAMN/ChangeLog.txt
@@ -0,0 +1,243 @@
+0.1.2.5
+=======
+! fix many memory leaks patch by  Merlin
+* x64 support by Merlin
+* Resource patch by mataes (for translations)
+
+0.1.2.4
+=======
+* Only show popup tab if popup plugin is present
+! Wrong time displayed in mailbrower (fix by y_b)
+
+0.1.2.3
+=======
+* New design for the options pages (Thanks Eyecue)
+
+0.1.2.2
+=======
+* using, with updater, the correct file id in file listing (yamn 2in1)
++ added folders plugin support
++ Support for miranda 0.8
+
+0.1.2.1
+=======
+! Don't close MailBrowser when e-mails are updated if it is manually open 
++ Discard the new Event when message is shown or is deleted from the server
++ Option to disable the CList events per account
++ Contact status change also happens when e-mail are being deleted
+
+0.1.2.0
+=======
+! patch by TioDuke for icolib and status and status icons handling. Thanks!
+! code cleaning (properly destroy services and hooks)
++ Contact status changes accordingly the action (Ready, Working, Error)
+
+0.1.1.0
+=======
++ Show message is open in new thread
++ Click on individual new e-mail popups shows the message window
+
+0.1.0.2
+============
++ Pressing "Space" key will show the selected message
+! Delete message is done by DELETE key, not by '.'
+! removed some repeated code
+! "Ok" and "Select All" buttons in mail browser are translatable
+
+0.1.0.1
+============
++ Message body shown in separate edit box.
++ Support for Content-transfer-encoding: Quoted-Printable and base64
++ Recursive Content-type: multipart/ support
++ Option to auto retrieve body
+
+0.0.1.11
+============
++ Option to use yamn as a protocol.
+* Patch by Tioduke (code cleaning)
+! Fixed the crash parsing invalid "Date" header (SPAMs or silly e-mail client) (y_b)
+! ShowMessage dialog follows Content-type header to chose the codepage (y_b)
++ Only supported codepages are shown in the options (y_b)
++ Enhance codepages support (y_b)
+
+0.0.1.10
+============
+! Icons are based on single bitmap image (y_b)
+* Show full feaders on double click in mailbrowser (y_b)
+* Dates are shown localized and sorted correctly (y_b)
+* To show long/short date and seconds (y_b)
+! Solved a rare/random crash on unstable connection (y_b)
+! Enabled tabstop on new tabcontrol and reordered tabstop in option pages (y_b)
+* Enable TAB selection in mailbrowser dialog (patch by -pv-)
++ introducing 2in1 build - can be used both in win9x and NT/XP
+* Options redesign.
+
+0.0.1.9
+============
+* Patch by Perf (visual patch)
+
+0.0.1.8
+============
++ add ctr-A to select all mails
++ del key delete selected mail
++ add a select all button
+
+0.0.1.7
+============
+* Change options dialog (use tabsrmm uxtheme)
+! Invert back and text color for no new mail popup in option page.
+* New default icon reworked by Faith Healer.
+
+0.0.1.6
+============
+* Try to update all icons when changing in icolib.
+! Allow scrolling in list of email account. (Patch by Jazzy)
+! Memory leak in stls fix (y_b)
+
+0.0.1.5
+============
+! Bug fix with help.dll problem. (Patch by Jazzy)
+  (http://developer.berlios.de/bugs/?func=detailbug&bug_id=6692&group_id=3292)
+! Remove merge in agressiveoptimize.h
+
+0.0.1.4
+============
+! Option page bug (patch by y_b)
+* Allow to edit the application text
+
+0.0.1.3
+============
+! Bug fix with new icolib
+
+0.0.1.2
+============
+! Bug fix with updater and stable version
++ Using new m_icolib.h
++ New context menu entry to launch application
++ Patch by y_b
+{
+  + Start TLS support
+  + Better icolib support
+  + SSL Logging
+}
+
+0.0.1.1
+============
+! Bug fix on left click popup.
+
+0.0.1.0
+============
+Time for release.
+
+0.0.0.18
+============
+! Visual bug in option page
+! Recompilation for win 9x users.
+
+0.0.0.17
+============
+* Redesign option page to have only one entry in plugins options
+! Bug fix when there is no date set in the header (spam mails) (Thx Egres)
+
+0.0.0.16
+============
+* Right click on error popup close the popup.
+! Missing break; in nonewmail popup in switch.
++ Add option to rename contact according to new mail.
+! Patch by pescuma on delete accounts 
+
+0.0.0.15
+============
+! Fixed dismiss event by right click on new mail popup crash
+* Change string for the status choose button
+! use CallServiceSync() instead of CallService() for adding clistevent (now icon blinks)
+
+0.0.0.14
+============
+! Tooltip on the clist event will now show correct text
+! Remove the messagebox on double clik on mail
+* Change options dialog add dialog for status choose.
+
+0.0.0.13
+============
++ Use of event count for the keyboard flashing
+
+0.0.0.12
+============
+- Remove message body retrieving due to bug.
+
+0.0.0.11
+============
++ Add a function to retrieve the whole mail source.
++ Show the mail source when double clicking on it in mail browser.
++ Add a version resource.
+
+0.0.0.10
+============
++ Now able to pass hContact handle to popup so can show avatar if set.
+* Change folder structure in svn SDK\import replace by include
+
+0.0.0.9
+============
++ Sorting asc and desc of the mail browser listview
++ Use the format yyyy-mm-dd hh:mm:ss for date comparaison in sorting
++ Doubleclick on list view to show the mail body but it seems to be empty :(
+
+0.0.0.8
+============
++ Add date field in mail browser
+* Modify the tooltip text for the clist event (add account name)
+* Rename Contact member of CAccount by hContact since it is an HANDLE
++ Updater support for BETA
+* Using the right headers (no more the one in SDK)
+
+0.0.0.7
+============
++ Added changelog txt file.
++ Check presence of icolib to choose the right icon to show in clist
++ Status message will show all message pending in mail box (until they get retrieve by your email client)
+
+0.0.0.6
+============
+* Options page redesign.
++ Right click on popup close the clist event too.
++ Update status message if no new mail.
++ Right click on popup^with no new mail close the popup.
+* No more delete of contact (avoid group affectation bug).
+
+0.0.0.5
+============
++ Add contact context menu entry to check for new mail.
++ Catch double click event on contact to shown the mail browser.
+
+0.0.0.4
+============
++ Add per account option to be show as contact or not.
++ Gestion de la suppression d'un compte
++ Use of the status message for showing number of emails.
++ Refresh yamn contact on the click on apply in options dialog.
+* Better condition for the ^contact loop  (ouuppsss)
+
+0.0.0.3
+============
++ Now account are shown as a contact.
++ Source code modification and use of yamn.h
++ Wait the event moduleloaded before loading the icons (support icolib).
+
+0.0.0.2
+============
++ Use of patch by Q (From file listing) (Memory cleaning, empty mail browser even if there are mails, yamn freeze sometime)
++ Use of thread access function.
++ Possibility to change toptoolbar icons via icolib.
++ Icon in main menu entry (Asked by a7)
++ New Icons set by Manudevil.
++ Change version number to be compatible with updater plugin
+
+0.01
+============
+
++ icolib support.
++ keyboard flash support (just 10 sec) (thx TioDuke) needs Keyboard Notify Ext. 1.5.4.4
++ list of email can be sorted.
+* left click on popup shows email list.
+* better toptoolbar support.
\ No newline at end of file
diff --git a/plugins/YAMN/YAMN.dsp b/plugins/YAMN/YAMN.dsp
new file mode 100644
index 0000000000..b8dc6f3e6f
--- /dev/null
+++ b/plugins/YAMN/YAMN.dsp
@@ -0,0 +1,376 @@
+# Microsoft Developer Studio Project File - Name="YAMN" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=YAMN - Win32 Release Win2in1
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "YAMN.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "YAMN.mak" CFG="YAMN - Win32 Release Win2in1"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "YAMN - Win32 Release Win2in1" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Debug Win2in1" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Release Win9x" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Debug Win9x" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release\Win2in1"
+# PROP BASE Intermediate_Dir "Release\Win2in1"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release\Win2in1"
+# PROP Intermediate_Dir "Release\Win2in1"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN2IN1" /YX /FD /c
+# ADD CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /I "../../include/msapi" /I "../../include_API" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN2IN1" /FR /YX /FD /c
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /machine:I386 /out:"../../bin/release/plugins/YAMN.dll" /filealign:512
+# ADD LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /pdb:"../../bin/release/plugins/yamn.pdb" /debug /machine:I386 /out:"../../bin/release/plugins/yamn.dll" /filealign:512
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug\Win2in1"
+# PROP BASE Intermediate_Dir "Debug\Win2in1"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug\Win2in1"
+# PROP Intermediate_Dir "Debug\Win2in1"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WIN2IN1" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /I "../../include/msapi" /I "../../include_API" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WIN2IN1" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x417 /d "_DEBUG"
+# ADD RSC /l 0x417 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN.dll"
+# ADD LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /pdb:"../../bin/Debug/plugins/yamn.pdb" /debug /machine:I386 /out:"../../bin/Debug/plugins/yamn.dll" /pdbtype:sept
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release/WinNT"
+# PROP BASE Intermediate_Dir "Release/WinNT"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release/WinNT"
+# PROP Intermediate_Dir "Release/WinNT"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /I "../../include/msapi" /I "../../include_API" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD BASE RSC /l 0x405 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /machine:I386 /out:"../../bin/release/plugins/YAMN-NT/YAMN.dll" /filealign:512
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/release/plugins/YAMN-NT/yamn.dll" /filealign:512
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug/WinNT"
+# PROP BASE Intermediate_Dir "Debug/WinNT"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug/WinNT"
+# PROP Intermediate_Dir "Debug/WinNT"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /I "../../include/msapi" /I "../../include_API" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x417 /d "_DEBUG"
+# ADD RSC /l 0x417 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN-NT/YAMN.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN-NT/YAMN.dll" /pdbtype:sept
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release\Win9x"
+# PROP BASE Intermediate_Dir "Release\Win9x"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release\Win9x"
+# PROP Intermediate_Dir "Release\Win9x"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN9X" /YX /FD /c
+# ADD CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /I "../../include/msapi" /I "../../include_API" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN9X" /YX /FD /c
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /machine:I386 /out:"../../bin/Release/plugins/YAMN-9x/YAMN.dll" /filealign:512
+# ADD LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/Release/plugins/YAMN-9x/YAMN.dll" /filealign:512
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug\Win9x"
+# PROP BASE Intermediate_Dir "Debug\Win9x"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug\Win9x"
+# PROP Intermediate_Dir "Debug\Win9x"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WIN9X" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /I "../../include/msapi" /I "../../include_API" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WIN9X" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x417 /d "_DEBUG"
+# ADD RSC /l 0x417 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN-9x/YAMN.dll"
+# ADD LINK32 libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN-9x/YAMN.dll" /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "YAMN - Win32 Release Win2in1"
+# Name "YAMN - Win32 Debug Win2in1"
+# Name "YAMN - Win32 Release"
+# Name "YAMN - Win32 Debug"
+# Name "YAMN - Win32 Release Win9x"
+# Name "YAMN - Win32 Debug Win9x"
+# Begin Group "YAMN"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Group "Mail browser, dialogs"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\browser\badconnect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\browser\mailbrowser.cpp
+# End Source File
+# End Group
+# Begin Group "Mails"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\mails\decode.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\mails\mails.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\mails\mime.cpp
+# End Source File
+# End Group
+# Begin Group "POP3 plugin"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\proto\md5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\netlib.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\pop3\pop3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\pop3\pop3comm.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\pop3\pop3opt.cpp
+# End Source File
+# End Group
+# Begin Group "Header"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\debug.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\pop3\pop3.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\pop3\pop3comm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\proto\pop3\pop3opt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\yamn.h
+# End Source File
+# End Group
+# Begin Group "include"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\include\IcoLib.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\m_kbdnotify.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\m_popup.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\m_toptoolbar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\m_uninstaller.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\include\m_updater.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\account.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ChangeLog.txt
+# End Source File
+# Begin Source File
+
+SOURCE=.\debug.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\filterplugin.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\protoplugin.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\services.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\synchro.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\yamn.cpp
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\resources\iconeutral.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\iconttbdown.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\icooffline.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\icoyamn3.ico
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\yamn.bmp
+# End Source File
+# Begin Source File
+
+SOURCE=.\resources\YAMN.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/plugins/YAMN/YAMN.dsw b/plugins/YAMN/YAMN.dsw
new file mode 100644
index 0000000000..ea0dcf1465
--- /dev/null
+++ b/plugins/YAMN/YAMN.dsw
@@ -0,0 +1,65 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Base"=".\filter\Base\Base.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "YAMN"=".\YAMN.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "proto_YAMN"=".\icons\proto_YAMN.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "simple"=".\filter\simple\simple.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/plugins/YAMN/YAMN.mak b/plugins/YAMN/YAMN.mak
new file mode 100644
index 0000000000..221fe20295
--- /dev/null
+++ b/plugins/YAMN/YAMN.mak
@@ -0,0 +1,1736 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on YAMN.dsp
+!IF "$(CFG)" == ""
+CFG=YAMN - Win32 Release Win2in1
+!MESSAGE No configuration specified. Defaulting to YAMN - Win32 Release Win2in1.
+!ENDIF 
+
+!IF "$(CFG)" != "YAMN - Win32 Release Win2in1" && "$(CFG)" != "YAMN - Win32 Debug Win2in1" && "$(CFG)" != "YAMN - Win32 Release" && "$(CFG)" != "YAMN - Win32 Debug" && "$(CFG)" != "YAMN - Win32 Release Win9x" && "$(CFG)" != "YAMN - Win32 Debug Win9x"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "YAMN.mak" CFG="YAMN - Win32 Release Win2in1"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "YAMN - Win32 Release Win2in1" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Debug Win2in1" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Release Win9x" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "YAMN - Win32 Debug Win9x" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+OUTDIR=.\Release\Win2in1
+INTDIR=.\Release\Win2in1
+# Begin Custom Macros
+OutDir=.\Release\Win2in1
+# End Custom Macros
+
+ALL : "..\..\bin\release\plugins\yamn.dll"
+
+
+
+CLEAN :
+	-@erase "$(INTDIR)\account.obj"
+	-@erase "$(INTDIR)\account.sbr"
+	-@erase "$(INTDIR)\badconnect.obj"
+	-@erase "$(INTDIR)\badconnect.sbr"
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\debug.sbr"
+	-@erase "$(INTDIR)\decode.obj"
+	-@erase "$(INTDIR)\decode.sbr"
+	-@erase "$(INTDIR)\filterplugin.obj"
+	-@erase "$(INTDIR)\filterplugin.sbr"
+	-@erase "$(INTDIR)\mailbrowser.obj"
+	-@erase "$(INTDIR)\mailbrowser.sbr"
+	-@erase "$(INTDIR)\mails.obj"
+	-@erase "$(INTDIR)\mails.sbr"
+	-@erase "$(INTDIR)\main.obj"
+	-@erase "$(INTDIR)\main.sbr"
+	-@erase "$(INTDIR)\md5.obj"
+	-@erase "$(INTDIR)\md5.sbr"
+	-@erase "$(INTDIR)\mime.obj"
+	-@erase "$(INTDIR)\mime.sbr"
+	-@erase "$(INTDIR)\netlib.obj"
+	-@erase "$(INTDIR)\netlib.sbr"
+	-@erase "$(INTDIR)\pop3.obj"
+	-@erase "$(INTDIR)\pop3.sbr"
+	-@erase "$(INTDIR)\pop3comm.obj"
+	-@erase "$(INTDIR)\pop3comm.sbr"
+	-@erase "$(INTDIR)\pop3opt.obj"
+	-@erase "$(INTDIR)\pop3opt.sbr"
+	-@erase "$(INTDIR)\protoplugin.obj"
+	-@erase "$(INTDIR)\protoplugin.sbr"
+	-@erase "$(INTDIR)\services.obj"
+	-@erase "$(INTDIR)\services.sbr"
+	-@erase "$(INTDIR)\ssl.obj"
+	-@erase "$(INTDIR)\ssl.sbr"
+	-@erase "$(INTDIR)\synchro.obj"
+	-@erase "$(INTDIR)\synchro.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\yamn.obj"
+	-@erase "$(INTDIR)\YAMN.res"
+	-@erase "$(INTDIR)\yamn.sbr"
+	-@erase "$(OUTDIR)\YAMN.bsc"
+	-@erase "$(OUTDIR)\yamn.exp"
+	-@erase "..\..\bin\release\plugins\yamn.dll"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN2IN1" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\YAMN.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\YAMN.res" /d "NDEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\YAMN.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\badconnect.sbr" \
+	"$(INTDIR)\mailbrowser.sbr" \
+	"$(INTDIR)\decode.sbr" \
+	"$(INTDIR)\mails.sbr" \
+	"$(INTDIR)\mime.sbr" \
+	"$(INTDIR)\md5.sbr" \
+	"$(INTDIR)\netlib.sbr" \
+	"$(INTDIR)\pop3.sbr" \
+	"$(INTDIR)\pop3comm.sbr" \
+	"$(INTDIR)\pop3opt.sbr" \
+	"$(INTDIR)\ssl.sbr" \
+	"$(INTDIR)\account.sbr" \
+	"$(INTDIR)\debug.sbr" \
+	"$(INTDIR)\filterplugin.sbr" \
+	"$(INTDIR)\main.sbr" \
+	"$(INTDIR)\protoplugin.sbr" \
+	"$(INTDIR)\services.sbr" \
+	"$(INTDIR)\synchro.sbr" \
+	"$(INTDIR)\yamn.sbr"
+
+"$(OUTDIR)\YAMN.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\yamn.pdb" /machine:I386 /out:"../../bin/release/plugins/yamn.dll" /implib:"$(OUTDIR)\yamn.lib" /filealign:512 
+LINK32_OBJS= \
+	"$(INTDIR)\badconnect.obj" \
+	"$(INTDIR)\mailbrowser.obj" \
+	"$(INTDIR)\decode.obj" \
+	"$(INTDIR)\mails.obj" \
+	"$(INTDIR)\mime.obj" \
+	"$(INTDIR)\md5.obj" \
+	"$(INTDIR)\netlib.obj" \
+	"$(INTDIR)\pop3.obj" \
+	"$(INTDIR)\pop3comm.obj" \
+	"$(INTDIR)\pop3opt.obj" \
+	"$(INTDIR)\account.obj" \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\filterplugin.obj" \
+	"$(INTDIR)\main.obj" \
+	"$(INTDIR)\protoplugin.obj" \
+	"$(INTDIR)\services.obj" \
+	"$(INTDIR)\synchro.obj" \
+	"$(INTDIR)\yamn.obj" \
+	"$(INTDIR)\YAMN.res"
+
+"..\..\bin\release\plugins\yamn.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+OUTDIR=.\Debug\Win2in1
+INTDIR=.\Debug\Win2in1
+# Begin Custom Macros
+OutDir=.\Debug\Win2in1
+# End Custom Macros
+
+ALL : "..\..\bin\Debug\plugins\YAMN.dll" "$(OUTDIR)\YAMN.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\account.obj"
+	-@erase "$(INTDIR)\account.sbr"
+	-@erase "$(INTDIR)\badconnect.obj"
+	-@erase "$(INTDIR)\badconnect.sbr"
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\debug.sbr"
+	-@erase "$(INTDIR)\decode.obj"
+	-@erase "$(INTDIR)\decode.sbr"
+	-@erase "$(INTDIR)\filterplugin.obj"
+	-@erase "$(INTDIR)\filterplugin.sbr"
+	-@erase "$(INTDIR)\mailbrowser.obj"
+	-@erase "$(INTDIR)\mailbrowser.sbr"
+	-@erase "$(INTDIR)\mails.obj"
+	-@erase "$(INTDIR)\mails.sbr"
+	-@erase "$(INTDIR)\main.obj"
+	-@erase "$(INTDIR)\main.sbr"
+	-@erase "$(INTDIR)\md5.obj"
+	-@erase "$(INTDIR)\md5.sbr"
+	-@erase "$(INTDIR)\mime.obj"
+	-@erase "$(INTDIR)\mime.sbr"
+	-@erase "$(INTDIR)\netlib.obj"
+	-@erase "$(INTDIR)\netlib.sbr"
+	-@erase "$(INTDIR)\pop3.obj"
+	-@erase "$(INTDIR)\pop3.sbr"
+	-@erase "$(INTDIR)\pop3comm.obj"
+	-@erase "$(INTDIR)\pop3comm.sbr"
+	-@erase "$(INTDIR)\pop3opt.obj"
+	-@erase "$(INTDIR)\pop3opt.sbr"
+	-@erase "$(INTDIR)\protoplugin.obj"
+	-@erase "$(INTDIR)\protoplugin.sbr"
+	-@erase "$(INTDIR)\services.obj"
+	-@erase "$(INTDIR)\services.sbr"
+	-@erase "$(INTDIR)\synchro.obj"
+	-@erase "$(INTDIR)\synchro.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(INTDIR)\yamn.obj"
+	-@erase "$(INTDIR)\YAMN.res"
+	-@erase "$(INTDIR)\yamn.sbr"
+	-@erase "$(OUTDIR)\YAMN.bsc"
+	-@erase "$(OUTDIR)\YAMN.exp"
+	-@erase "$(OUTDIR)\YAMN.pdb"
+	-@erase "..\..\bin\Debug\plugins\YAMN.dll"
+	-@erase "..\..\bin\Debug\plugins\YAMN.ilk"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WIN2IN1" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\YAMN.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\YAMN.res" /d "_DEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\YAMN.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\badconnect.sbr" \
+	"$(INTDIR)\mailbrowser.sbr" \
+	"$(INTDIR)\decode.sbr" \
+	"$(INTDIR)\mails.sbr" \
+	"$(INTDIR)\mime.sbr" \
+	"$(INTDIR)\md5.sbr" \
+	"$(INTDIR)\netlib.sbr" \
+	"$(INTDIR)\pop3.sbr" \
+	"$(INTDIR)\pop3comm.sbr" \
+	"$(INTDIR)\pop3opt.sbr" \
+	"$(INTDIR)\account.sbr" \
+	"$(INTDIR)\debug.sbr" \
+	"$(INTDIR)\filterplugin.sbr" \
+	"$(INTDIR)\main.sbr" \
+	"$(INTDIR)\protoplugin.sbr" \
+	"$(INTDIR)\services.sbr" \
+	"$(INTDIR)\synchro.sbr" \
+	"$(INTDIR)\yamn.sbr"
+
+"$(OUTDIR)\YAMN.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)\YAMN.pdb" /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN.dll" /implib:"$(OUTDIR)\YAMN.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\badconnect.obj" \
+	"$(INTDIR)\mailbrowser.obj" \
+	"$(INTDIR)\decode.obj" \
+	"$(INTDIR)\mails.obj" \
+	"$(INTDIR)\mime.obj" \
+	"$(INTDIR)\md5.obj" \
+	"$(INTDIR)\netlib.obj" \
+	"$(INTDIR)\pop3.obj" \
+	"$(INTDIR)\pop3comm.obj" \
+	"$(INTDIR)\pop3opt.obj" \
+	"$(INTDIR)\account.obj" \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\filterplugin.obj" \
+	"$(INTDIR)\main.obj" \
+	"$(INTDIR)\protoplugin.obj" \
+	"$(INTDIR)\services.obj" \
+	"$(INTDIR)\synchro.obj" \
+	"$(INTDIR)\yamn.obj" \
+	"$(INTDIR)\YAMN.res"
+
+"..\..\bin\Debug\plugins\YAMN.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+OUTDIR=.\Release/WinNT
+INTDIR=.\Release/WinNT
+
+ALL : "..\..\bin\release\plugins\YAMN-NT\yamn.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\account.obj"
+	-@erase "$(INTDIR)\badconnect.obj"
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\decode.obj"
+	-@erase "$(INTDIR)\filterplugin.obj"
+	-@erase "$(INTDIR)\mailbrowser.obj"
+	-@erase "$(INTDIR)\mails.obj"
+	-@erase "$(INTDIR)\main.obj"
+	-@erase "$(INTDIR)\md5.obj"
+	-@erase "$(INTDIR)\mime.obj"
+	-@erase "$(INTDIR)\netlib.obj"
+	-@erase "$(INTDIR)\pop3.obj"
+	-@erase "$(INTDIR)\pop3comm.obj"
+	-@erase "$(INTDIR)\pop3opt.obj"
+	-@erase "$(INTDIR)\protoplugin.obj"
+	-@erase "$(INTDIR)\services.obj"
+	-@erase "$(INTDIR)\synchro.obj"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\yamn.obj"
+	-@erase "$(INTDIR)\YAMN.res"
+	-@erase "$(OUTDIR)\yamn.exp"
+	-@erase "..\..\bin\release\plugins\YAMN-NT\yamn.dll"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)\YAMN.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\YAMN.res" /d "NDEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\YAMN.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\yamn.pdb" /machine:I386 /out:"../../bin/release/plugins/YAMN-NT/yamn.dll" /implib:"$(OUTDIR)\yamn.lib" /filealign:512 
+LINK32_OBJS= \
+	"$(INTDIR)\badconnect.obj" \
+	"$(INTDIR)\mailbrowser.obj" \
+	"$(INTDIR)\decode.obj" \
+	"$(INTDIR)\mails.obj" \
+	"$(INTDIR)\mime.obj" \
+	"$(INTDIR)\md5.obj" \
+	"$(INTDIR)\netlib.obj" \
+	"$(INTDIR)\pop3.obj" \
+	"$(INTDIR)\pop3comm.obj" \
+	"$(INTDIR)\pop3opt.obj" \
+	"$(INTDIR)\account.obj" \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\filterplugin.obj" \
+	"$(INTDIR)\main.obj" \
+	"$(INTDIR)\protoplugin.obj" \
+	"$(INTDIR)\services.obj" \
+	"$(INTDIR)\synchro.obj" \
+	"$(INTDIR)\yamn.obj" \
+	"$(INTDIR)\YAMN.res"
+
+"..\..\bin\release\plugins\YAMN-NT\yamn.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+OUTDIR=.\Debug/WinNT
+INTDIR=.\Debug/WinNT
+# Begin Custom Macros
+OutDir=.\Debug/WinNT
+# End Custom Macros
+
+ALL : "..\..\bin\Debug\plugins\YAMN-NT\YAMN.dll" "$(OUTDIR)\YAMN.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\account.obj"
+	-@erase "$(INTDIR)\account.sbr"
+	-@erase "$(INTDIR)\badconnect.obj"
+	-@erase "$(INTDIR)\badconnect.sbr"
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\debug.sbr"
+	-@erase "$(INTDIR)\decode.obj"
+	-@erase "$(INTDIR)\decode.sbr"
+	-@erase "$(INTDIR)\filterplugin.obj"
+	-@erase "$(INTDIR)\filterplugin.sbr"
+	-@erase "$(INTDIR)\mailbrowser.obj"
+	-@erase "$(INTDIR)\mailbrowser.sbr"
+	-@erase "$(INTDIR)\mails.obj"
+	-@erase "$(INTDIR)\mails.sbr"
+	-@erase "$(INTDIR)\main.obj"
+	-@erase "$(INTDIR)\main.sbr"
+	-@erase "$(INTDIR)\md5.obj"
+	-@erase "$(INTDIR)\md5.sbr"
+	-@erase "$(INTDIR)\mime.obj"
+	-@erase "$(INTDIR)\mime.sbr"
+	-@erase "$(INTDIR)\netlib.obj"
+	-@erase "$(INTDIR)\netlib.sbr"
+	-@erase "$(INTDIR)\pop3.obj"
+	-@erase "$(INTDIR)\pop3.sbr"
+	-@erase "$(INTDIR)\pop3comm.obj"
+	-@erase "$(INTDIR)\pop3comm.sbr"
+	-@erase "$(INTDIR)\pop3opt.obj"
+	-@erase "$(INTDIR)\pop3opt.sbr"
+	-@erase "$(INTDIR)\protoplugin.obj"
+	-@erase "$(INTDIR)\protoplugin.sbr"
+	-@erase "$(INTDIR)\services.obj"
+	-@erase "$(INTDIR)\services.sbr"
+	-@erase "$(INTDIR)\synchro.obj"
+	-@erase "$(INTDIR)\synchro.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(INTDIR)\yamn.obj"
+	-@erase "$(INTDIR)\YAMN.res"
+	-@erase "$(INTDIR)\yamn.sbr"
+	-@erase "$(OUTDIR)\YAMN.bsc"
+	-@erase "$(OUTDIR)\YAMN.exp"
+	-@erase "$(OUTDIR)\YAMN.pdb"
+	-@erase "..\..\bin\Debug\plugins\YAMN-NT\YAMN.dll"
+	-@erase "..\..\bin\Debug\plugins\YAMN-NT\YAMN.ilk"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\YAMN.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\YAMN.res" /d "_DEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\YAMN.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\badconnect.sbr" \
+	"$(INTDIR)\mailbrowser.sbr" \
+	"$(INTDIR)\decode.sbr" \
+	"$(INTDIR)\mails.sbr" \
+	"$(INTDIR)\mime.sbr" \
+	"$(INTDIR)\md5.sbr" \
+	"$(INTDIR)\netlib.sbr" \
+	"$(INTDIR)\pop3.sbr" \
+	"$(INTDIR)\pop3comm.sbr" \
+	"$(INTDIR)\pop3opt.sbr" \
+	"$(INTDIR)\account.sbr" \
+	"$(INTDIR)\debug.sbr" \
+	"$(INTDIR)\filterplugin.sbr" \
+	"$(INTDIR)\main.sbr" \
+	"$(INTDIR)\protoplugin.sbr" \
+	"$(INTDIR)\services.sbr" \
+	"$(INTDIR)\synchro.sbr" \
+	"$(INTDIR)\yamn.sbr"
+
+"$(OUTDIR)\YAMN.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)\YAMN.pdb" /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN-NT/YAMN.dll" /implib:"$(OUTDIR)\YAMN.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\badconnect.obj" \
+	"$(INTDIR)\mailbrowser.obj" \
+	"$(INTDIR)\decode.obj" \
+	"$(INTDIR)\mails.obj" \
+	"$(INTDIR)\mime.obj" \
+	"$(INTDIR)\md5.obj" \
+	"$(INTDIR)\netlib.obj" \
+	"$(INTDIR)\pop3.obj" \
+	"$(INTDIR)\pop3comm.obj" \
+	"$(INTDIR)\pop3opt.obj" \
+	"$(INTDIR)\account.obj" \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\filterplugin.obj" \
+	"$(INTDIR)\main.obj" \
+	"$(INTDIR)\protoplugin.obj" \
+	"$(INTDIR)\services.obj" \
+	"$(INTDIR)\synchro.obj" \
+	"$(INTDIR)\yamn.obj" \
+	"$(INTDIR)\YAMN.res"
+
+"..\..\bin\Debug\plugins\YAMN-NT\YAMN.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+OUTDIR=.\Release\Win9x
+INTDIR=.\Release\Win9x
+
+ALL : "..\..\bin\Release\plugins\YAMN-9x\YAMN.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\account.obj"
+	-@erase "$(INTDIR)\badconnect.obj"
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\decode.obj"
+	-@erase "$(INTDIR)\filterplugin.obj"
+	-@erase "$(INTDIR)\mailbrowser.obj"
+	-@erase "$(INTDIR)\mails.obj"
+	-@erase "$(INTDIR)\main.obj"
+	-@erase "$(INTDIR)\md5.obj"
+	-@erase "$(INTDIR)\mime.obj"
+	-@erase "$(INTDIR)\netlib.obj"
+	-@erase "$(INTDIR)\pop3.obj"
+	-@erase "$(INTDIR)\pop3comm.obj"
+	-@erase "$(INTDIR)\pop3opt.obj"
+	-@erase "$(INTDIR)\protoplugin.obj"
+	-@erase "$(INTDIR)\services.obj"
+	-@erase "$(INTDIR)\synchro.obj"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\yamn.obj"
+	-@erase "$(INTDIR)\YAMN.res"
+	-@erase "$(OUTDIR)\YAMN.exp"
+	-@erase "..\..\bin\Release\plugins\YAMN-9x\YAMN.dll"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "WIN9X" /Fp"$(INTDIR)\YAMN.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\YAMN.res" /d "NDEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\YAMN.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /incremental:no /pdb:"$(OUTDIR)\YAMN.pdb" /machine:I386 /out:"../../bin/Release/plugins/YAMN-9x/YAMN.dll" /implib:"$(OUTDIR)\YAMN.lib" /filealign:512 
+LINK32_OBJS= \
+	"$(INTDIR)\badconnect.obj" \
+	"$(INTDIR)\mailbrowser.obj" \
+	"$(INTDIR)\decode.obj" \
+	"$(INTDIR)\mails.obj" \
+	"$(INTDIR)\mime.obj" \
+	"$(INTDIR)\md5.obj" \
+	"$(INTDIR)\netlib.obj" \
+	"$(INTDIR)\pop3.obj" \
+	"$(INTDIR)\pop3comm.obj" \
+	"$(INTDIR)\pop3opt.obj" \
+	"$(INTDIR)\account.obj" \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\filterplugin.obj" \
+	"$(INTDIR)\main.obj" \
+	"$(INTDIR)\protoplugin.obj" \
+	"$(INTDIR)\services.obj" \
+	"$(INTDIR)\synchro.obj" \
+	"$(INTDIR)\yamn.obj" \
+	"$(INTDIR)\YAMN.res"
+
+"..\..\bin\Release\plugins\YAMN-9x\YAMN.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+OUTDIR=.\Debug\Win9x
+INTDIR=.\Debug\Win9x
+# Begin Custom Macros
+OutDir=.\Debug\Win9x
+# End Custom Macros
+
+ALL : "..\..\bin\Debug\plugins\YAMN-9x\YAMN.dll" "$(OUTDIR)\YAMN.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\account.obj"
+	-@erase "$(INTDIR)\account.sbr"
+	-@erase "$(INTDIR)\badconnect.obj"
+	-@erase "$(INTDIR)\badconnect.sbr"
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\debug.sbr"
+	-@erase "$(INTDIR)\decode.obj"
+	-@erase "$(INTDIR)\decode.sbr"
+	-@erase "$(INTDIR)\filterplugin.obj"
+	-@erase "$(INTDIR)\filterplugin.sbr"
+	-@erase "$(INTDIR)\mailbrowser.obj"
+	-@erase "$(INTDIR)\mailbrowser.sbr"
+	-@erase "$(INTDIR)\mails.obj"
+	-@erase "$(INTDIR)\mails.sbr"
+	-@erase "$(INTDIR)\main.obj"
+	-@erase "$(INTDIR)\main.sbr"
+	-@erase "$(INTDIR)\md5.obj"
+	-@erase "$(INTDIR)\md5.sbr"
+	-@erase "$(INTDIR)\mime.obj"
+	-@erase "$(INTDIR)\mime.sbr"
+	-@erase "$(INTDIR)\netlib.obj"
+	-@erase "$(INTDIR)\netlib.sbr"
+	-@erase "$(INTDIR)\pop3.obj"
+	-@erase "$(INTDIR)\pop3.sbr"
+	-@erase "$(INTDIR)\pop3comm.obj"
+	-@erase "$(INTDIR)\pop3comm.sbr"
+	-@erase "$(INTDIR)\pop3opt.obj"
+	-@erase "$(INTDIR)\pop3opt.sbr"
+	-@erase "$(INTDIR)\protoplugin.obj"
+	-@erase "$(INTDIR)\protoplugin.sbr"
+	-@erase "$(INTDIR)\services.obj"
+	-@erase "$(INTDIR)\services.sbr"
+	-@erase "$(INTDIR)\synchro.obj"
+	-@erase "$(INTDIR)\synchro.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(INTDIR)\yamn.obj"
+	-@erase "$(INTDIR)\YAMN.res"
+	-@erase "$(INTDIR)\yamn.sbr"
+	-@erase "$(OUTDIR)\YAMN.bsc"
+	-@erase "$(OUTDIR)\YAMN.exp"
+	-@erase "$(OUTDIR)\YAMN.pdb"
+	-@erase "..\..\bin\Debug\plugins\YAMN-9x\YAMN.dll"
+	-@erase "..\..\bin\Debug\plugins\YAMN-9x\YAMN.ilk"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "WIN9X" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\YAMN.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\YAMN.res" /d "_DEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\YAMN.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\badconnect.sbr" \
+	"$(INTDIR)\mailbrowser.sbr" \
+	"$(INTDIR)\decode.sbr" \
+	"$(INTDIR)\mails.sbr" \
+	"$(INTDIR)\mime.sbr" \
+	"$(INTDIR)\md5.sbr" \
+	"$(INTDIR)\netlib.sbr" \
+	"$(INTDIR)\pop3.sbr" \
+	"$(INTDIR)\pop3comm.sbr" \
+	"$(INTDIR)\pop3opt.sbr" \
+	"$(INTDIR)\account.sbr" \
+	"$(INTDIR)\debug.sbr" \
+	"$(INTDIR)\filterplugin.sbr" \
+	"$(INTDIR)\main.sbr" \
+	"$(INTDIR)\protoplugin.sbr" \
+	"$(INTDIR)\services.sbr" \
+	"$(INTDIR)\synchro.sbr" \
+	"$(INTDIR)\yamn.sbr"
+
+"$(OUTDIR)\YAMN.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib /nologo /base:"0x60010000" /subsystem:windows /dll /incremental:yes /pdb:"$(OUTDIR)\YAMN.pdb" /debug /machine:I386 /out:"../../bin/Debug/plugins/YAMN-9x/YAMN.dll" /implib:"$(OUTDIR)\YAMN.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\badconnect.obj" \
+	"$(INTDIR)\mailbrowser.obj" \
+	"$(INTDIR)\decode.obj" \
+	"$(INTDIR)\mails.obj" \
+	"$(INTDIR)\mime.obj" \
+	"$(INTDIR)\md5.obj" \
+	"$(INTDIR)\netlib.obj" \
+	"$(INTDIR)\pop3.obj" \
+	"$(INTDIR)\pop3comm.obj" \
+	"$(INTDIR)\pop3opt.obj" \
+	"$(INTDIR)\account.obj" \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\filterplugin.obj" \
+	"$(INTDIR)\main.obj" \
+	"$(INTDIR)\protoplugin.obj" \
+	"$(INTDIR)\services.obj" \
+	"$(INTDIR)\synchro.obj" \
+	"$(INTDIR)\yamn.obj" \
+	"$(INTDIR)\YAMN.res"
+
+"..\..\bin\Debug\plugins\YAMN-9x\YAMN.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("YAMN.dep")
+!INCLUDE "YAMN.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "YAMN.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "YAMN - Win32 Release Win2in1" || "$(CFG)" == "YAMN - Win32 Debug Win2in1" || "$(CFG)" == "YAMN - Win32 Release" || "$(CFG)" == "YAMN - Win32 Debug" || "$(CFG)" == "YAMN - Win32 Release Win9x" || "$(CFG)" == "YAMN - Win32 Debug Win9x"
+SOURCE=.\browser\badconnect.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\badconnect.obj"	"$(INTDIR)\badconnect.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\badconnect.obj"	"$(INTDIR)\badconnect.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\badconnect.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\badconnect.obj"	"$(INTDIR)\badconnect.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\badconnect.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\badconnect.obj"	"$(INTDIR)\badconnect.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\browser\mailbrowser.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\mailbrowser.obj"	"$(INTDIR)\mailbrowser.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\mailbrowser.obj"	"$(INTDIR)\mailbrowser.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\mailbrowser.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\mailbrowser.obj"	"$(INTDIR)\mailbrowser.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\mailbrowser.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\mailbrowser.obj"	"$(INTDIR)\mailbrowser.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\mails\decode.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\decode.obj"	"$(INTDIR)\decode.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\decode.obj"	"$(INTDIR)\decode.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\decode.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\decode.obj"	"$(INTDIR)\decode.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\decode.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\decode.obj"	"$(INTDIR)\decode.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\mails\mails.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\mails.obj"	"$(INTDIR)\mails.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\mails.obj"	"$(INTDIR)\mails.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\mails.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\mails.obj"	"$(INTDIR)\mails.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\mails.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\mails.obj"	"$(INTDIR)\mails.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\mails\mime.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\mime.obj"	"$(INTDIR)\mime.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\mime.obj"	"$(INTDIR)\mime.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\mime.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\mime.obj"	"$(INTDIR)\mime.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\mime.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\mime.obj"	"$(INTDIR)\mime.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\proto\md5.c
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\md5.obj"	"$(INTDIR)\md5.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\md5.obj"	"$(INTDIR)\md5.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\md5.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\md5.obj"	"$(INTDIR)\md5.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\md5.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\md5.obj"	"$(INTDIR)\md5.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\proto\netlib.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\netlib.obj"	"$(INTDIR)\netlib.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\netlib.obj"	"$(INTDIR)\netlib.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\netlib.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\netlib.obj"	"$(INTDIR)\netlib.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\netlib.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\netlib.obj"	"$(INTDIR)\netlib.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\proto\pop3\pop3.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\pop3.obj"	"$(INTDIR)\pop3.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\pop3.obj"	"$(INTDIR)\pop3.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\pop3.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\pop3.obj"	"$(INTDIR)\pop3.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\pop3.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\pop3.obj"	"$(INTDIR)\pop3.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\proto\pop3\pop3comm.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\pop3comm.obj"	"$(INTDIR)\pop3comm.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\pop3comm.obj"	"$(INTDIR)\pop3comm.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\pop3comm.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\pop3comm.obj"	"$(INTDIR)\pop3comm.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\pop3comm.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\pop3comm.obj"	"$(INTDIR)\pop3comm.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\proto\pop3\pop3opt.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\pop3opt.obj"	"$(INTDIR)\pop3opt.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\pop3opt.obj"	"$(INTDIR)\pop3opt.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\pop3opt.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\pop3opt.obj"	"$(INTDIR)\pop3opt.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\pop3opt.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\pop3opt.obj"	"$(INTDIR)\pop3opt.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\proto\ssl.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\ssl.obj"	"$(INTDIR)\ssl.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\ssl.obj"	"$(INTDIR)\ssl.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\ssl.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\ssl.obj"	"$(INTDIR)\ssl.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\ssl.obj" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\ssl.obj"	"$(INTDIR)\ssl.sbr" : $(SOURCE) "$(INTDIR)"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\account.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\account.obj"	"$(INTDIR)\account.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\account.obj"	"$(INTDIR)\account.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\account.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\account.obj"	"$(INTDIR)\account.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\account.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\account.obj"	"$(INTDIR)\account.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\debug.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\debug.obj"	"$(INTDIR)\debug.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\debug.obj"	"$(INTDIR)\debug.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\debug.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\debug.obj"	"$(INTDIR)\debug.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\debug.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\debug.obj"	"$(INTDIR)\debug.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\filterplugin.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\filterplugin.obj"	"$(INTDIR)\filterplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\filterplugin.obj"	"$(INTDIR)\filterplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\filterplugin.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\filterplugin.obj"	"$(INTDIR)\filterplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\filterplugin.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\filterplugin.obj"	"$(INTDIR)\filterplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\main.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\main.obj"	"$(INTDIR)\main.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\main.obj"	"$(INTDIR)\main.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\main.obj"	"$(INTDIR)\main.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\main.obj"	"$(INTDIR)\main.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\protoplugin.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\protoplugin.obj"	"$(INTDIR)\protoplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\protoplugin.obj"	"$(INTDIR)\protoplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\protoplugin.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\protoplugin.obj"	"$(INTDIR)\protoplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\protoplugin.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\protoplugin.obj"	"$(INTDIR)\protoplugin.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\services.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\services.obj"	"$(INTDIR)\services.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\services.obj"	"$(INTDIR)\services.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\services.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\services.obj"	"$(INTDIR)\services.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\services.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\services.obj"	"$(INTDIR)\services.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\synchro.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\synchro.obj"	"$(INTDIR)\synchro.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\synchro.obj"	"$(INTDIR)\synchro.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\synchro.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\synchro.obj"	"$(INTDIR)\synchro.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\synchro.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\synchro.obj"	"$(INTDIR)\synchro.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\yamn.cpp
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\yamn.obj"	"$(INTDIR)\yamn.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\yamn.obj"	"$(INTDIR)\yamn.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\yamn.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\yamn.obj"	"$(INTDIR)\yamn.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\yamn.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\yamn.obj"	"$(INTDIR)\yamn.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\resources\YAMN.rc
+
+!IF  "$(CFG)" == "YAMN - Win32 Release Win2in1"
+
+
+"$(INTDIR)\YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) /l 0x417 /fo"$(INTDIR)\YAMN.res" /i "resources" /d "NDEBUG" $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win2in1"
+
+
+"$(INTDIR)\YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) /l 0x417 /fo"$(INTDIR)\YAMN.res" /i "resources" /d "_DEBUG" $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release"
+
+
+"$(INTDIR)\YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) /l 0x417 /fo"$(INTDIR)\YAMN.res" /i "resources" /d "NDEBUG" $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug"
+
+
+"$(INTDIR)\YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) /l 0x417 /fo"$(INTDIR)\YAMN.res" /i "resources" /d "_DEBUG" $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Release Win9x"
+
+
+"$(INTDIR)\YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) /l 0x417 /fo"$(INTDIR)\YAMN.res" /i "resources" /d "NDEBUG" $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "YAMN - Win32 Debug Win9x"
+
+
+"$(INTDIR)\YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) /l 0x417 /fo"$(INTDIR)\YAMN.res" /i "resources" /d "_DEBUG" $(SOURCE)
+
+
+!ENDIF 
+
+
+!ENDIF 
+
diff --git a/plugins/YAMN/YAMN.vcproj b/plugins/YAMN/YAMN.vcproj
new file mode 100644
index 0000000000..b18209261c
--- /dev/null
+++ b/plugins/YAMN/YAMN.vcproj
@@ -0,0 +1,1593 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="YAMN"
+	ProjectGUID="{8F13F353-8DEC-4E87-AD17-EFA427425B29}"
+	RootNamespace="YAMN"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/YAMN.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;YAMN_DEBUG"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Debug/YAMN.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1029"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib ws2_32.lib msvcrt.lib comctl32.lib"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreAllDefaultLibraries="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug/YAMN.pdb"
+				GenerateMapFile="true"
+				MapFileName=".\Debug/YAMN.map"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=".\Debug/YAMN.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release Win9x|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release\Win9x/YAMN.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Release\Win9x/YAMN.pch"
+				AssemblerListingLocation=".\Release\Win9x/"
+				ObjectFile=".\Release\Win9x/"
+				ProgramDataBaseFileName=".\Release\Win9x/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1029"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/filealign:512"
+				AdditionalDependencies="./libs/unicows.lib ws2_32.lib msvcrt.lib"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreAllDefaultLibraries="true"
+				ProgramDatabaseFile=".\Release\Win9x/YAMN.pdb"
+				SubSystem="2"
+				BaseAddress="0x60020000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=".\Release\Win9x/YAMN.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release Unicode|Win32"
+			OutputDirectory="../../tweety_bin9/Release Unicode/Plugins"
+			IntermediateDirectory="../../tweety_bin9/Release Unicode/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/YAMN.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="1"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS,WIN2IN1"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Release/YAMN.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1029"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="ws2_32.lib msvcrt.lib libs/unicows.lib kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib shell32.lib wsock32.lib "
+				OutputFile="$(OutDir)/YAMN.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreAllDefaultLibraries="true"
+				ProgramDatabaseFile="$(OutDir)/YAMN.pdb"
+				SubSystem="2"
+				BaseAddress=""
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(OutDir)/YAMN.lib"
+				MergeSections=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug Win9x|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="true"
+				SuppressStartupBanner="true"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug\Win9x/YAMN.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				PrecompiledHeaderFile=".\Debug\Win9x/YAMN.pch"
+				AssemblerListingLocation=".\Debug\Win9x/"
+				ObjectFile=".\Debug\Win9x/"
+				ProgramDataBaseFileName=".\Debug\Win9x/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="4"
+				CompileAs="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1029"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="odbc32.lib odbccp32.lib ws2_32.lib msvcrt.lib"
+				OutputFile="$(OutDir)\$(ProjectName).dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="true"
+				IgnoreAllDefaultLibraries="true"
+				GenerateDebugInformation="true"
+				ProgramDatabaseFile=".\Debug\Win9x/YAMN.pdb"
+				BaseAddress="0x60020000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=".\Debug\Win9x/YAMN.lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="YAMN"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="account.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="ChangeLog.txt"
+				>
+			</File>
+			<File
+				RelativePath="debug.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="filterplugin.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="main.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="protoplugin.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="services.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="synchro.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="yamn.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+						BasicRuntimeChecks="3"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="2"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						AdditionalIncludeDirectories=""
+						PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						AdditionalIncludeDirectories="../../include;../ExternalAPI"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						BrowseInformation="1"
+					/>
+				</FileConfiguration>
+			</File>
+			<Filter
+				Name="Mail browser, dialogs"
+				>
+				<File
+					RelativePath="browser\badconnect.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="browser\mailbrowser.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="Mails"
+				>
+				<File
+					RelativePath="mails\decode.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="mails\mails.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="mails\mime.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="POP3 plugin"
+				>
+				<File
+					RelativePath="proto\md5.c"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories="../../include;../ExternalAPI"
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="proto\netlib.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3comm.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3opt.cpp"
+					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;$(NoInherit)"
+							BasicRuntimeChecks="3"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="2"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release Unicode|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="1"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;YAMN_DEBUG;$(NoInherit)"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Debug Win9x|Win32"
+						>
+						<Tool
+							Name="VCCLCompilerTool"
+							Optimization="0"
+							AdditionalIncludeDirectories=""
+							PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;$(NoInherit)"
+							BasicRuntimeChecks="3"
+							BrowseInformation="1"
+						/>
+					</FileConfiguration>
+				</File>
+			</Filter>
+			<Filter
+				Name="Header"
+				>
+				<File
+					RelativePath="debug.h"
+					>
+				</File>
+				<File
+					RelativePath="main.h"
+					>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3.h"
+					>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3comm.h"
+					>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3opt.h"
+					>
+				</File>
+				<File
+					RelativePath="yamn.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="include"
+				>
+				<File
+					RelativePath="include\IcoLib.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_kbdnotify.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_popup.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_toptoolbar.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_uninstaller.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_updater.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="resources\bmttb.bmp"
+				>
+			</File>
+			<File
+				RelativePath="resources\icon1.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\iconeutral.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\iconttb.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\iconttbdown.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\iconttbup.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\resources\icooffline.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\icoyamn1.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\icoyamn2.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\icoyamn3.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\ttbcheck.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\ttbfcheck.bmp"
+				>
+			</File>
+			<File
+				RelativePath=".\resources\yamn.bmp"
+				>
+			</File>
+			<File
+				RelativePath="resources\YAMN.rc"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="resources"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Win9x|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="resources"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release Unicode|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="resources"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug Win9x|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+						AdditionalIncludeDirectories="resources"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Documentation"
+			>
+			<File
+				RelativePath="docs\changelog.txt"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="docs\language.pop3.txt"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="docs\language.txt"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="docs\YAMN-License.txt"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="docs\YAMN-Readme.developers.txt"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="docs\YAMN-Readme.txt"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					ExcludedFromBuild="true"
+					>
+					<Tool
+						Name="VCCustomBuildTool"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/plugins/YAMN/YAMN_10.sln b/plugins/YAMN/YAMN_10.sln
new file mode 100644
index 0000000000..d7fb3b0aec
--- /dev/null
+++ b/plugins/YAMN/YAMN_10.sln
@@ -0,0 +1,25 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yamn", "YAMN_10.vcxproj", "{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Debug|Win32.Build.0 = Debug|Win32
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Debug|x64.ActiveCfg = Debug|x64
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Debug|x64.Build.0 = Debug|x64
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Release|Win32.ActiveCfg = Release|Win32
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Release|Win32.Build.0 = Release|Win32
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Release|x64.ActiveCfg = Release|x64
+		{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/plugins/YAMN/YAMN_10.vcxproj b/plugins/YAMN/YAMN_10.vcxproj
new file mode 100644
index 0000000000..370ed621bb
--- /dev/null
+++ b/plugins/YAMN/YAMN_10.vcxproj
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>Yamn</ProjectName>
+    <ProjectGuid>{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}</ProjectGuid>
+    <RootNamespace>yamn</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+    <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|x64'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+    <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_WINDOWS;_USRDLL;_DEBUG;YAMN_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <StructMemberAlignment>4Bytes</StructMemberAlignment>
+      <AssemblerListingLocation>
+      </AssemblerListingLocation>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>./libs/unicows.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <BaseAddress>0x60010000</BaseAddress>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+      <WholeProgramOptimization>true</WholeProgramOptimization>
+      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN2IN1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <StructMemberAlignment>4Bytes</StructMemberAlignment>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>./libs/unicows.lib;comctl32.lib;wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OptimizeReferences>true</OptimizeReferences>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+      <BaseAddress>0x60010000</BaseAddress>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <Optimization>Full</Optimization>
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;WIN9X;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalOptions>/filealign:512 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalDependencies>comctl32.lib;wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <BaseAddress>0x60010000</BaseAddress>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <Bscmake />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../../include;../ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>comctl32.lib;wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <BaseAddress>0x60010000</BaseAddress>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Link>
+    <Bscmake />
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="account.cpp" />
+    <ClCompile Include="debug.cpp" />
+    <ClCompile Include="filterplugin.cpp" />
+    <ClCompile Include="main.cpp" />
+    <ClCompile Include="protoplugin.cpp" />
+    <ClCompile Include="services.cpp" />
+    <ClCompile Include="synchro.cpp" />
+    <ClCompile Include="yamn.cpp" />
+    <ClCompile Include="browser\badconnect.cpp" />
+    <ClCompile Include="browser\mailbrowser.cpp" />
+    <ClCompile Include="mails\decode.cpp" />
+    <ClCompile Include="mails\mails.cpp" />
+    <ClCompile Include="mails\mime.cpp" />
+    <ClCompile Include="proto\md5.c" />
+    <ClCompile Include="proto\netlib.cpp" />
+    <ClCompile Include="proto\pop3\pop3.cpp" />
+    <ClCompile Include="proto\pop3\pop3comm.cpp" />
+    <ClCompile Include="proto\pop3\pop3opt.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="resources\iconeutral.ico" />
+    <None Include="resources\iconttbdown.ico" />
+    <None Include="resources\icooffline.ico" />
+    <None Include="resources\icoyamn3.ico" />
+    <None Include="resources\yamn.bmp" />
+    <None Include="ChangeLog.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="resources\resource.h" />
+    <ClInclude Include="debug.h" />
+    <ClInclude Include="main.h" />
+    <ClInclude Include="proto\pop3\pop3.h" />
+    <ClInclude Include="proto\pop3\pop3comm.h" />
+    <ClInclude Include="proto\pop3\pop3opt.h" />
+    <ClInclude Include="yamn.h" />
+    <ClInclude Include="include\m_kbdnotify.h" />
+    <ClInclude Include="include\m_toptoolbar.h" />
+    <ClInclude Include="include\m_uninstaller.h" />
+    <ClInclude Include="include\m_updater.h" />
+    <ClInclude Include="version.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="resources\YAMN.rc" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/plugins/YAMN/YAMN_10.vcxproj.filters b/plugins/YAMN/YAMN_10.vcxproj.filters
new file mode 100644
index 0000000000..b684f9d03b
--- /dev/null
+++ b/plugins/YAMN/YAMN_10.vcxproj.filters
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{30eb0c8d-5383-47ff-8a05-4b9793d26d50}</UniqueIdentifier>
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+    </Filter>
+    <Filter Include="Source Files\Mail browser, dialogs">
+      <UniqueIdentifier>{6b01a00c-f1f9-4958-b89a-2721d5bdd229}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\Mails">
+      <UniqueIdentifier>{4743640f-ca6b-4518-8ead-525bea367ec0}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Source Files\POP3 plugin">
+      <UniqueIdentifier>{0189ff00-aae9-40fd-847b-a81dca9496bd}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{daef8d66-0947-4a6c-ad55-4e1b2bf26d86}</UniqueIdentifier>
+      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{c58708cc-53b7-4db2-b19e-4d6291665e8b}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\include">
+      <UniqueIdentifier>{a5d01df4-9348-4078-ab04-99ee691cd263}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="account.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="debug.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="filterplugin.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="protoplugin.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="services.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="synchro.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="yamn.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="browser\badconnect.cpp">
+      <Filter>Source Files\Mail browser, dialogs</Filter>
+    </ClCompile>
+    <ClCompile Include="browser\mailbrowser.cpp">
+      <Filter>Source Files\Mail browser, dialogs</Filter>
+    </ClCompile>
+    <ClCompile Include="mails\decode.cpp">
+      <Filter>Source Files\Mails</Filter>
+    </ClCompile>
+    <ClCompile Include="mails\mails.cpp">
+      <Filter>Source Files\Mails</Filter>
+    </ClCompile>
+    <ClCompile Include="mails\mime.cpp">
+      <Filter>Source Files\Mails</Filter>
+    </ClCompile>
+    <ClCompile Include="proto\md5.c">
+      <Filter>Source Files\POP3 plugin</Filter>
+    </ClCompile>
+    <ClCompile Include="proto\netlib.cpp">
+      <Filter>Source Files\POP3 plugin</Filter>
+    </ClCompile>
+    <ClCompile Include="proto\pop3\pop3.cpp">
+      <Filter>Source Files\POP3 plugin</Filter>
+    </ClCompile>
+    <ClCompile Include="proto\pop3\pop3comm.cpp">
+      <Filter>Source Files\POP3 plugin</Filter>
+    </ClCompile>
+    <ClCompile Include="proto\pop3\pop3opt.cpp">
+      <Filter>Source Files\POP3 plugin</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="resources\iconeutral.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="resources\iconttbdown.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="resources\icooffline.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="resources\icoyamn3.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="resources\yamn.bmp">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="ChangeLog.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="resources\resource.h">
+      <Filter>Resource Files</Filter>
+    </ClInclude>
+    <ClInclude Include="debug.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="main.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="proto\pop3\pop3.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="proto\pop3\pop3comm.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="proto\pop3\pop3opt.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="yamn.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="include\m_kbdnotify.h">
+      <Filter>Header Files\include</Filter>
+    </ClInclude>
+    <ClInclude Include="include\m_toptoolbar.h">
+      <Filter>Header Files\include</Filter>
+    </ClInclude>
+    <ClInclude Include="include\m_uninstaller.h">
+      <Filter>Header Files\include</Filter>
+    </ClInclude>
+    <ClInclude Include="include\m_updater.h">
+      <Filter>Header Files\include</Filter>
+    </ClInclude>
+    <ClInclude Include="version.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="resources\YAMN.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/plugins/YAMN/YAMN_9.vcproj b/plugins/YAMN/YAMN_9.vcproj
new file mode 100644
index 0000000000..9ac6cf827f
--- /dev/null
+++ b/plugins/YAMN/YAMN_9.vcproj
@@ -0,0 +1,915 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="_YAMN"
+	ProjectGUID="{C5A87409-F08C-4A07-A8F9-1F5D52BA6D72}"
+	RootNamespace="yamn"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+		<Platform
+			Name="x64"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug Unicode|Win32"
+			OutputDirectory="$(SolutionDir)Debug 2in1/Plugins"
+			IntermediateDirectory="$(SolutionDir)Debug 2in1/Obj/$(ProjectName)/YAMN-2in1"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;_DEBUG;YAMN_DEBUG"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				StructMemberAlignment="3"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="./libs/unicows.lib comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug Unicode|x64"
+			OutputDirectory="$(SolutionDir)Debug Unicode64/Plugins"
+			IntermediateDirectory="$(SolutionDir)Debug Unicode64/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;_DEBUG;YAMN_DEBUG"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)Release 2in1/Plugins/YAMN-9x"
+			IntermediateDirectory="$(SolutionDir)Release 2in1/Obj/$(ProjectName)/YAMN-9x"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN9X"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				StructMemberAlignment="3"
+				EnableFunctionLevelLinking="true"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/filealign:512"
+				AdditionalDependencies="./libs/unicows.lib comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|x64"
+			OutputDirectory="$(SolutionDir)Release64/Plugins"
+			IntermediateDirectory="$(SolutionDir)Release64/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;WIN9X;_USRDLL"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/filealign:512"
+				AdditionalDependencies="comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release Unicode|Win32"
+			OutputDirectory="$(SolutionDir)Release 2in1/Plugins"
+			IntermediateDirectory="$(SolutionDir)Release 2in1/Obj/$(ProjectName)/YAMN-2in1"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN2IN1;_CRT_SECURE_NO_WARNINGS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				StructMemberAlignment="3"
+				EnableFunctionLevelLinking="true"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="./libs/unicows.lib comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release Unicode|x64"
+			OutputDirectory="$(SolutionDir)Release Unicode64/Plugins"
+			IntermediateDirectory="$(SolutionDir)Release Unicode64/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="1"
+				InlineFunctionExpansion="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WIN2IN1;_CRT_SECURE_NO_WARNINGS"
+				StringPooling="true"
+				RuntimeLibrary="2"
+				EnableFunctionLevelLinking="true"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)Debug 2in1/Plugins/YAMN-9x"
+			IntermediateDirectory="$(SolutionDir)Debug 2in1/Obj/$(ProjectName)/YAMN-9x"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				StructMemberAlignment="3"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				DebugInformationFormat="4"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="./libs/unicows.lib comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)Debug64/Plugins"
+			IntermediateDirectory="$(SolutionDir)Debug64/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pch;*.pgc;*.pgd;*.meta;$(TargetPath);$(TargetDir)$(ProjectName).*;$(TargetDir)$(RootNamespace).*"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../../include;../ExternalAPI"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;YAMN_DEBUG;WIN9X;YAMN_VER_BETA"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				AssemblerListingLocation=""
+				ObjectFile="$(IntDir)/"
+				ProgramDataBaseFileName="$(IntDir)/"
+				BrowseInformation="1"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+				DisableSpecificWarnings="4996"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="comctl32.lib wsock32.lib"
+				OutputFile="$(OutDir)\$(RootNamespace).dll"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				BaseAddress="0x60010000"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary="$(IntDir)/$(TargetName).lib"
+				TargetMachine="17"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				OutputFile="$(OutDir)/$(TargetName).bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="account.cpp"
+				>
+			</File>
+			<File
+				RelativePath="debug.cpp"
+				>
+			</File>
+			<File
+				RelativePath="filterplugin.cpp"
+				>
+			</File>
+			<File
+				RelativePath="main.cpp"
+				>
+			</File>
+			<File
+				RelativePath="protoplugin.cpp"
+				>
+			</File>
+			<File
+				RelativePath="services.cpp"
+				>
+			</File>
+			<File
+				RelativePath="synchro.cpp"
+				>
+			</File>
+			<File
+				RelativePath="yamn.cpp"
+				>
+			</File>
+			<Filter
+				Name="Mail browser, dialogs"
+				>
+				<File
+					RelativePath="browser\badconnect.cpp"
+					>
+				</File>
+				<File
+					RelativePath="browser\mailbrowser.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="Mails"
+				>
+				<File
+					RelativePath="mails\decode.cpp"
+					>
+				</File>
+				<File
+					RelativePath="mails\mails.cpp"
+					>
+				</File>
+				<File
+					RelativePath="mails\mime.cpp"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="POP3 plugin"
+				>
+				<File
+					RelativePath="proto\md5.c"
+					>
+				</File>
+				<File
+					RelativePath="proto\netlib.cpp"
+					>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3.cpp"
+					>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3comm.cpp"
+					>
+				</File>
+				<File
+					RelativePath="proto\pop3\pop3opt.cpp"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="resources\iconeutral.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\iconttbdown.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\icooffline.ico"
+				>
+			</File>
+			<File
+				RelativePath="resources\icoyamn3.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\resources\resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\resources\yamn.bmp"
+				>
+			</File>
+			<File
+				RelativePath="resources\YAMN.rc"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			>
+			<File
+				RelativePath="debug.h"
+				>
+			</File>
+			<File
+				RelativePath="main.h"
+				>
+			</File>
+			<File
+				RelativePath="proto\pop3\pop3.h"
+				>
+			</File>
+			<File
+				RelativePath="proto\pop3\pop3comm.h"
+				>
+			</File>
+			<File
+				RelativePath="proto\pop3\pop3opt.h"
+				>
+			</File>
+			<File
+				RelativePath="yamn.h"
+				>
+			</File>
+			<Filter
+				Name="include"
+				>
+				<File
+					RelativePath="include\m_kbdnotify.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_toptoolbar.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_uninstaller.h"
+					>
+				</File>
+				<File
+					RelativePath="include\m_updater.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<File
+			RelativePath="ChangeLog.txt"
+			>
+		</File>
+		<File
+			RelativePath=".\version.h"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/plugins/YAMN/YAMNopts.cpp b/plugins/YAMN/YAMNopts.cpp
new file mode 100644
index 0000000000..99a8091366
--- /dev/null
+++ b/plugins/YAMN/YAMNopts.cpp
@@ -0,0 +1,2 @@
+
+
diff --git a/plugins/YAMN/account.cpp b/plugins/YAMN/account.cpp
new file mode 100644
index 0000000000..255f9cffa9
--- /dev/null
+++ b/plugins/YAMN/account.cpp
@@ -0,0 +1,1539 @@
+/*
+ * This code implements manipulation with accounts
+ * such as reading accounts from file, writing them to file,
+ * finding account by name etc.
+ *
+ * (c) majvan 2002-2004
+ */
+
+#include "yamn.h"
+#include "mails/m_mails.h"
+#if defined(DEBUG_FILEREAD) || defined(DEBUG_FILEREADMESSAGES) || defined(DEBUG_SYNCHRO)
+	#include <stdio.h>
+#endif
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+extern PSWMRG PluginBrowserSO;
+extern TCHAR AccountFileName[];
+extern TCHAR *CurDir;
+extern PLUGININFO pluginInfo;
+extern YAMN_VARIABLES YAMNVar;
+
+extern BOOL WINAPI SWMRGInitialize(PSWMRG pSWMRG,TCHAR *Name);
+extern void WINAPI SWMRGDelete(PSWMRG pSWMRG);
+extern DWORD WINAPI SWMRGWaitToWrite(PSWMRG pSWMRG,DWORD dwTimeout);
+extern void WINAPI SWMRGDoneWriting(PSWMRG pSWMRG);
+extern DWORD WINAPI SWMRGWaitToRead(PSWMRG pSWMRG, DWORD dwTimeout);
+extern void WINAPI SWMRGDoneReading(PSWMRG pSWMRG);
+extern DWORD WINAPI WaitToReadFcn(PSWMRG SObject);
+extern void WINAPI ReadDoneFcn(PSWMRG SObject);
+extern HYAMNPROTOPLUGIN FindPlugin(DWORD PluginID);
+
+extern void WINAPI DeleteMessagesToEndFcn(HACCOUNT Account,HYAMNMAIL From);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+// SMALL INTRO
+// Accounts are queued in a queue (chained list). Pointer to first account is called "FirstAccount"
+// Account queue is ended with NULL- pointered account (NULL handle)
+// FirstAccount has every plugin in its own YAMN_PLUGIN structure
+
+//Account status CS
+//When we check some account, thread should change status of account to idle, connecting etc.
+//So if we want to read status, we have to successfully write and then read.
+LPCRITICAL_SECTION AccountStatusCS;
+
+//File Writing CS
+//When 2 threads want to write to file...
+LPCRITICAL_SECTION FileWritingCS;
+
+// Creates new account, which has plugin specified structure
+INT_PTR CreatePluginAccountSvc(WPARAM wParam,LPARAM lParam);
+
+// Deletes account from memory
+INT_PTR DeletePluginAccountSvc(WPARAM wParam,LPARAM);
+
+// Initializes standard YAMN account parameters
+int InitAccount(HACCOUNT Which);
+
+// Deinitializes (deletes) standard YAMN account parameters
+void DeInitAccount(HACCOUNT Which);
+
+// Sends signal (sets event) in AccountAccessSO and MessagesAccessSO
+// This event makes that all calls to ...WaitToRead or ...WaitToWrite are returned to WAIT_FAILED
+void StopSignalFcn(HACCOUNT Which);
+
+// Function used to encrypt password (codes / decodes string)
+// There's a problem when a character is going to be encrypted to (TCHAR)0, (end of string)
+// Dest- input and output string (input/output length of string is 1:1)
+// Encrypt- TRUE for encryption, FALSE for decryption
+void CodeDecodeString(TCHAR *Dest,BOOL Encrypt);
+
+// Only do the main work for FileToMemoryX functions. FileToMemoryX only opens file.
+static DWORD PostFileToMemory(HANDLE File,TCHAR **MemFile,TCHAR **End);
+
+// Reads the file and stores the content to allocated memory
+// FileName- name of file 
+// MemFile- pointer to the pointer of TCHAR, new allocated memory by this function
+// End- where new allocated memory filled with file contents ends
+DWORD FileToMemoryA(char *FileName,TCHAR **MemFile,TCHAR **End);
+
+// Same as FileToMemoryA, but Unicode filename
+DWORD FileToMemoryW(char *FileName,TCHAR **MemFile,TCHAR **End);
+
+// Reads string that ends with character 0 and copies it to new allocated memory
+// Parser-pointer to memory with string
+//		function sets this parameter to point at the next char after read string
+// End-information how long this string can be (in pointer to last possible char)
+// StoreTo-function allocates memory and copies the string, allocated memory returned in StoreTo
+// DebugString-the debug message showed in debug version
+#if defined(DEBUG_FILEREAD) || defined(DEBUG_FILEREADMESSAGES)
+DWORD ReadStringFromMemory(TCHAR **Parser,TCHAR *End,TCHAR **StoreTo,TCHAR *DebugString);
+#endif
+DWORD ReadStringFromMemory(TCHAR **Parser,TCHAR *End,TCHAR **StoreTo);
+#ifndef UNICODE
+	#if defined(DEBUG_FILEREAD) || defined(DEBUG_FILEREADMESSAGES)
+DWORD ReadStringFromMemoryW(WCHAR **Parser,TCHAR *End,WCHAR **StoreTo,WCHAR *DebugString);
+	#endif  //if defined(DEBUG...)
+DWORD ReadStringFromMemoryW(WCHAR **Parser,TCHAR *End,WCHAR **StoreTo);
+#endif	//ifdef Unicode
+
+// Reads notification parameters from memory
+// Parser-pointer to memory with string
+//		function sets this parameter to point at the next char after read string
+// End-information how long this string can be (in pointer to last possible char)
+// Which-pointer to notification structure to fill with read parameters
+static DWORD ReadNotificationFromMemory(TCHAR **Parser,TCHAR *End,YAMN_NOTIFICATION *Which);
+
+// Reads messages from memory
+// Which- address of account that mails (messages) belong to
+// Parser- pointer to data from memory, function changes it to the next char after messages read
+// End- the last possible char of messages
+DWORD ReadMessagesFromMemory(HACCOUNT Which,TCHAR **Parser,TCHAR *End);
+
+// Does all needed operations to read account
+static INT_PTR PerformAccountReading(HYAMNPROTOPLUGIN Plugin,TCHAR *MemFile,TCHAR *End);
+
+// Read one account from memory
+// Which- address of account
+// Parser- pointer to data from memory, function changes it to the next char after account read
+// End- the last possible char of account
+DWORD ReadAccountFromMemory(HACCOUNT Which,TCHAR **Parser,TCHAR *End);
+
+// Inserts accounts read from file to actual account queue
+INT_PTR AddAccountsFromFileASvc(WPARAM wParam,LPARAM lParam);
+
+// Same as AddAccountsFromFileA, but filename is (WCHAR *) type- Unicode string
+INT_PTR AddAccountsFromFileWSvc(WPARAM,LPARAM);
+
+// Writes simple string to file
+// File- handle of open file for writing
+// Source- string to write, ended with zero character
+DWORD WriteStringToFile(HANDLE File,TCHAR *Source);
+#ifndef UNICODE
+DWORD WriteStringToFileW(HANDLE File,WCHAR *Source);
+#else
+#define ReadStringFromMemoryW	ReadStringFromMemory
+#endif
+
+// Writes mails to file
+// File- handle of file
+// Which- address of account that mails belong to
+DWORD WriteMessagesToFile(HANDLE File,HACCOUNT Which);
+
+// Does all needed operations to write account to file
+static INT_PTR PerformAccountWriting(HYAMNPROTOPLUGIN Plugin,HANDLE File);
+
+// Writes accounts to file
+// Accounts are read from plugin's account queue
+// Function writes account data and calls WriteMessagesToFile to store account mails
+INT_PTR WriteAccountsToFileASvc(WPARAM wParam,LPARAM lParam);
+
+// Same as WriteAccountsToFileA, but filename is (WCHAR *) type- Unicode string
+INT_PTR WriteAccountsToFileWSvc(WPARAM wParam,LPARAM lParam);
+
+// Finds account by name and returns a pointer to it, or NULL when not found
+// we do not have to synchronize accounts for read access, because we never change name of account
+// (so if we want to change name of account we have to delete and create the new one)
+INT_PTR FindAccountByNameSvc(WPARAM wParam,LPARAM lParam);
+
+// Allocates a new account, and returns pointer to it
+// calling function should have write access (using AccountBrowserSO)
+// because new account is queues do account queue
+INT_PTR GetNextFreeAccountSvc(WPARAM wParam,LPARAM lParam);
+
+// Finds account for plugin
+//int FindPluginAccount(WPARAM wParam,LPARAM lParam);
+
+// Removes requested account from queue
+// and deletes it in memory calling new thread function, that does it in the background
+// This is very easy and the most secure way for plugins to delete account
+INT_PTR DeleteAccountSvc(WPARAM wParam,LPARAM);
+
+// This function is used as a thread function, that waits to signal for deleting account from memory
+// This signal is signaled in UsingAccount.Event (this signales that no thread will be use account in the future)
+DWORD WINAPI DeleteAccountInBackground(LPVOID Which);
+
+// Sends signal that all works with Plugin accounts should be stopped and accounts should not be used anymore.
+int StopAccounts(HYAMNPROTOPLUGIN Plugin);
+
+// Wait for accounts to finish its work
+int WaitForAllAccounts(HYAMNPROTOPLUGIN Plugin,BOOL GetAccountBrowserAccess=FALSE);
+
+// Deletes protocol accounts using protocol defined delete function.
+int DeleteAccounts(HYAMNPROTOPLUGIN Plugin);
+
+// If you want to get directly account status, call this function
+// You don't have to be in read-access to account and you can call this to retrieve status
+void WINAPI GetStatusFcn(HACCOUNT Which,char *Value);
+
+// If you want to set directly account status, call this function
+// You don't have to be in write-access to account and you can call this to retrieve status
+void WINAPI SetStatusFcn(HACCOUNT Which,char *Value);
+
+struct CExportedFunctions AccountExportedFcn[]=
+{
+	{YAMN_GETSTATUSID,(void *)GetStatusFcn},
+	{YAMN_SETSTATUSID,(void *)SetStatusFcn},
+};
+
+struct CExportedServices AccountExportedSvc[]=
+{
+	{MS_YAMN_CREATEPLUGINACCOUNT,CreatePluginAccountSvc},
+	{MS_YAMN_DELETEPLUGINACCOUNT,DeletePluginAccountSvc},
+	{MS_YAMN_FINDACCOUNTBYNAME,FindAccountByNameSvc},
+	{MS_YAMN_GETNEXTFREEACCOUNT,GetNextFreeAccountSvc},
+	{MS_YAMN_DELETEACCOUNT,DeletePluginAccountSvc},
+	{MS_YAMN_READACCOUNTSA,AddAccountsFromFileASvc},
+	{MS_YAMN_READACCOUNTSW,AddAccountsFromFileWSvc},
+	{MS_YAMN_WRITEACCOUNTSA,WriteAccountsToFileASvc},
+	{MS_YAMN_WRITEACCOUNTSW,WriteAccountsToFileWSvc},
+};
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+INT_PTR CreatePluginAccountSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	DWORD AccountVersion=(DWORD)lParam;
+	HACCOUNT NewAccount;
+
+//test if we are going to initialize members of suitable structure (structures of plugin and YAMN must match)
+	if(AccountVersion!=YAMN_ACCOUNTVERSION)
+		return NULL;
+
+	if(Plugin!=NULL)
+	{
+		if(Plugin->Fcn->NewAccountFcnPtr!=NULL)
+		{
+//Let plugin create its own structure, which can be derived from CAccount structure
+			NewAccount=Plugin->Fcn->NewAccountFcnPtr(Plugin,YAMN_ACCOUNTVERSION);
+			NewAccount->Plugin=Plugin;
+		}
+		else
+		{
+//We suggest plugin uses standard CAccount structure, so we create it
+			NewAccount=new struct CAccount;
+			NewAccount->Plugin=Plugin;
+		}
+//If not created successfully
+		if(NewAccount==NULL)
+			return NULL;
+//Init every members of structure, used by YAMN
+		InitAccount(NewAccount);
+
+		return (INT_PTR)NewAccount;
+	}
+	return NULL;
+}
+
+INT_PTR DeletePluginAccountSvc(WPARAM wParam,LPARAM)
+{
+	HACCOUNT OldAccount=(HACCOUNT)wParam;
+
+	if(OldAccount->Plugin->Fcn!=NULL)
+	{
+//Deinit every members and allocated fields of structure used by YAMN
+		DeInitAccount(OldAccount);
+		if(OldAccount->Plugin->Fcn->DeleteAccountFcnPtr!=NULL)
+		{
+//Let plugin delete its own CAccount derived structure
+			OldAccount->Plugin->Fcn->DeleteAccountFcnPtr(OldAccount);
+		}
+		else
+		{
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"DeletePluginAccountSvc:delete OldAccount\n");
+#endif
+			delete OldAccount;	//consider account as standard YAMN HACCOUNT and use its own destructor
+		}
+		return 1;
+	}
+	delete OldAccount;			//consider account as standard YAMN HACCOUNT, not initialized before and use its own destructor
+	return 1;
+}
+
+int InitAccount(HACCOUNT Which)
+{
+//initialize synchronizing objects
+	Which->AccountAccessSO=new SWMRG;
+	SWMRGInitialize(Which->AccountAccessSO,NULL);
+	Which->MessagesAccessSO=new SWMRG;
+	SWMRGInitialize(Which->MessagesAccessSO,NULL);
+	Which->UsingThreads=new SCOUNTER;
+	SWMRGInitialize(Which->MessagesAccessSO,NULL);
+
+//zero memory, where timestamps are stored
+	ZeroMemory(&Which->LastChecked,sizeof(Which->LastChecked));
+	ZeroMemory(&Which->LastSChecked,sizeof(Which->LastSChecked));
+	ZeroMemory(&Which->LastSynchronised,sizeof(Which->LastSynchronised));
+	ZeroMemory(&Which->LastMail,sizeof(Which->LastMail));
+
+	Which->Name=NULL;
+	Which->Mails=NULL;
+	Which->Interval=0;
+	Which->Flags=0;
+	Which->StatusFlags=0;
+	Which->Next=NULL;
+
+	Which->Server=new struct CServer;
+	Which->AbleToWork=TRUE;
+
+	return 1;
+}
+
+void DeInitAccount(HACCOUNT Which)
+{
+//delete YAMN allocated fields
+	if(Which->Name!=NULL)
+		delete[] Which->Name;
+	if(Which->Server->Name!=NULL)
+		delete[] Which->Server->Name;
+	if(Which->Server->Login!=NULL)
+		delete[] Which->Server->Login;
+	if(Which->Server->Passwd!=NULL)
+		delete[] Which->Server->Passwd;
+	if(Which->Server!=NULL)
+		delete[] Which->Server;
+
+	SWMRGDelete(Which->AccountAccessSO);
+	delete Which->AccountAccessSO;
+	SWMRGDelete(Which->MessagesAccessSO);
+	delete Which->MessagesAccessSO;
+	delete Which->UsingThreads;
+	DeleteMessagesToEndFcn(Which,(HYAMNMAIL)Which->Mails);
+}
+
+void StopSignalFcn(HACCOUNT Which)
+//set event that we are going to delete account
+{
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tStopSignalFcn:stop account: %x\n",Which);
+#endif
+	Which->AbleToWork=FALSE;
+//do not use synchronizing objects anymore
+//any access to these objects then ends with WAIT_FAILED
+	SetEvent(Which->AccountAccessSO->hFinishEV);
+	SetEvent(Which->MessagesAccessSO->hFinishEV);
+}
+
+void CodeDecodeString(TCHAR *Dest,BOOL Encrypt)
+{
+	TCHAR Code=STARTCODEPSW;
+
+	if(Dest==NULL)
+		return;
+
+	for(;*Dest!=(TCHAR)0;Dest++)
+	{
+		if(Encrypt)
+			*Dest=*Dest+Code;
+		else
+			*Dest=*Dest-Code;
+		Code+=(TCHAR)ADDCODEPSW;
+	}
+}
+
+static DWORD PostFileToMemory(HANDLE File,TCHAR **MemFile,TCHAR **End)
+{
+	DWORD FileSize,ReadBytes;
+
+	if(!(FileSize=GetFileSize(File,NULL)))
+	{
+		CloseHandle(File);
+		return EACC_FILESIZE;
+	}
+//allocate space in memory, where we copy the whole file
+	if(NULL==(*MemFile=(char *)new char[FileSize]))
+	{
+		CloseHandle(File);
+		return EACC_ALLOC;
+	}
+//copy file to memory
+	if(!ReadFile(File,(LPVOID)*MemFile,FileSize,&ReadBytes,NULL))
+	{
+		CloseHandle(File);
+		delete[] *MemFile;
+		return EACC_SYSTEM;
+	}
+	CloseHandle(File);
+	*End=*MemFile+FileSize/sizeof(TCHAR);
+	return 0;
+}
+
+DWORD FileToMemoryA(char *FileName,TCHAR **MemFile,TCHAR **End)
+{
+	HANDLE File;
+
+	if(INVALID_HANDLE_VALUE==(File=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)))
+		return EACC_SYSTEM;
+
+	return PostFileToMemory(File,MemFile,End);
+}
+
+DWORD FileToMemoryW(WCHAR *FileName,TCHAR **MemFile,TCHAR **End)
+{
+	HANDLE File;
+
+	if(INVALID_HANDLE_VALUE==(File=CreateFileW(FileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)))
+		return EACC_SYSTEM;
+
+	return PostFileToMemory(File,MemFile,End);
+}
+
+#if defined(DEBUG_FILEREAD) || defined(DEBUG_FILEREADMESSAGES)
+DWORD ReadStringFromMemory(TCHAR **Parser,TCHAR *End,TCHAR **StoreTo,TCHAR *DebugString)
+{
+//This is the debug version of ReadStringFromMemory function. This version shows MessageBox where
+//read string is displayed
+	TCHAR *Dest,*Finder;
+	DWORD Size;
+	TCHAR Debug[65536];
+
+	Finder=*Parser;
+	while((*Finder!=(TCHAR)0) && (Finder<=End)) Finder++;
+	_stprintf(Debug,_T("%s: %s,length is %d, remaining %d chars"),DebugString,*Parser,Finder-*Parser,End-Finder);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+	if(Finder>=End)
+		return EACC_FILECOMPATIBILITY;
+	if(Size=Finder-*Parser)
+	{
+		if(NULL==(Dest=*StoreTo=new TCHAR[Size+1]))
+			return EACC_ALLOC;
+		for(;*Parser<=Finder;(*Parser)++,Dest++)
+			*Dest=**Parser;
+	}
+	else
+	{
+		*StoreTo=NULL;
+		(*Parser)++;
+	}
+	return 0;
+}
+#endif
+
+DWORD ReadStringFromMemory(TCHAR **Parser,TCHAR *End,TCHAR **StoreTo)
+{
+	TCHAR *Dest,*Finder;
+	DWORD Size;
+
+	Finder=*Parser;
+	while((*Finder!=(TCHAR)0) && (Finder<=End)) Finder++;
+	if(Finder>=End)
+		return EACC_FILECOMPATIBILITY;
+	if(Size=Finder-*Parser)
+	{
+		if(NULL==(Dest=*StoreTo=new TCHAR[Size+1]))
+			return EACC_ALLOC;
+		for(;*Parser<=Finder;(*Parser)++,Dest++)
+			*Dest=**Parser;
+	}
+	else
+	{
+		*StoreTo=NULL;
+		(*Parser)++;
+	}
+	return 0;
+}
+
+#ifndef UNICODE
+	#if defined(DEBUG_FILEREAD) || defined(DEBUG_FILEREADMESSAGES)
+DWORD ReadStringFromMemoryW(WCHAR **Parser,TCHAR *End,WCHAR **StoreTo,WCHAR *DebugString)
+{
+//This is the debug version of ReadStringFromMemoryW function. This version shows MessageBox where
+//read string is displayed
+	WCHAR *Dest,*Finder;
+	DWORD Size;
+	WCHAR Debug[65536];
+
+	Finder=*Parser;
+	while((*Finder!=(WCHAR)0) && (Finder<=(WCHAR *)End)) Finder++;
+	swprintf(Debug,L"%s: %s,length is %d, remaining %d chars",DebugString,*Parser,Finder-*Parser,(WCHAR *)End-Finder);
+	MessageBoxW(NULL,Debug,L"debug",MB_OK);
+	if(Finder>=(WCHAR *)End)
+		return EACC_FILECOMPATIBILITY;
+	if(Size=Finder-*Parser)
+	{
+		if(NULL==(Dest=*StoreTo=new WCHAR[Size+1]))
+			return EACC_ALLOC;
+		for(;*Parser<=Finder;(*Parser)++,Dest++)
+			*Dest=**Parser;
+	}
+	else
+	{
+		*StoreTo=NULL;
+		(*Parser)++;
+	}
+	return 0;
+}
+	#endif  //if defined(DEBUG...)
+
+DWORD ReadStringFromMemoryW(WCHAR **Parser,TCHAR *End,WCHAR **StoreTo)
+{
+	WCHAR *Dest,*Finder;
+	DWORD Size;
+
+	Finder=*Parser;
+	while((*Finder!=(WCHAR)0) && (Finder<=(WCHAR *)End)) Finder++;
+	if(Finder>=(WCHAR *)End)
+		return EACC_FILECOMPATIBILITY;
+	if(Size=Finder-*Parser)
+	{
+		if(NULL==(Dest=*StoreTo=new WCHAR[Size+1]))
+			return EACC_ALLOC;
+		for(;*Parser<=Finder;(*Parser)++,Dest++)
+			*Dest=**Parser;
+	}
+	else
+	{
+		*StoreTo=NULL;
+		(*Parser)++;
+	}
+	return 0;
+}
+#endif	//ifdef unicode
+
+static DWORD ReadNotificationFromMemory(TCHAR **Parser,TCHAR *End,YAMN_NOTIFICATION *Which)
+{
+	DWORD Stat;
+#ifdef DEBUG_FILEREAD
+	TCHAR Debug[65536];
+#endif
+
+	Which->Flags=*(DWORD *)(*Parser);
+	(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("NFlags: %04x, remaining %d chars"),Which->Flags,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+
+	Which->PopUpB=*(COLORREF *)(*Parser);
+	(*Parser)+=sizeof(COLORREF)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("PopUpB: %04x, remaining %d chars"),Which->PopUpB,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->PopUpT=*(COLORREF *)(*Parser);
+	(*Parser)+=sizeof(COLORREF)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("PopUpT: %04x, remaining %d chars"),Which->PopUpT,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->PopUpTime=*(DWORD *)(*Parser);
+	(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("PopUpTime: %04x, remaining %d chars"),Which->PopUpTime,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+
+#ifdef	DEBUG_FILEREAD
+	if(Stat=ReadStringFromMemoryW((WCHAR **)Parser,End,&Which->App,L"App"))
+#else
+	if(Stat=ReadStringFromMemoryW((WCHAR **)Parser,End,&Which->App))
+#endif
+		return Stat;
+#ifdef	DEBUG_FILEREAD
+	if(Stat=ReadStringFromMemoryW((WCHAR **)Parser,End,&Which->AppParam,L"AppParam"))
+#else
+	if(Stat=ReadStringFromMemoryW((WCHAR **)Parser,End,&Which->AppParam))
+#endif
+		return Stat;
+	return 0;
+}
+
+DWORD ReadMessagesFromMemory(HACCOUNT Which,TCHAR **Parser,TCHAR *End)
+{
+	TCHAR *Finder;
+	DWORD Size,Stat;
+	HYAMNMAIL ActualMail=NULL;
+	struct CMimeItem *items;
+	char *ReadString;
+
+#ifdef DEBUG_FILEREAD
+	MessageBox(NULL,_T("going to read messages, if any..."),_T("debug"),MB_OK);
+#endif
+	do
+	{
+		Finder=*Parser;
+		while((*Finder!=(TCHAR)0) && (Finder<=End)) Finder++;
+		if(Finder>=End)
+			return EACC_FILECOMPATIBILITY;
+		if(Size=Finder-*Parser)
+		{
+			if(Which->Mails==NULL)		//First message in queue
+			{
+				if(NULL==(Which->Mails=ActualMail=CreateAccountMail(Which)))
+					return EACC_ALLOC;
+			}
+			else
+			{
+				if(NULL==(ActualMail->Next=CreateAccountMail(Which))){
+					return EACC_ALLOC;
+				}
+				ActualMail=ActualMail->Next;
+			}
+			items=NULL;
+#ifdef DEBUG_FILEREADMESSAGES
+			if(Stat=ReadStringFromMemory(Parser,End,&ActualMail->ID,_T("ID")))
+#else
+			if(Stat=ReadStringFromMemory(Parser,End,&ActualMail->ID))
+#endif
+				return Stat;
+//			ActualMail->MailData=new MAILDATA;		 !!! mem leake !!! this is alloc by CreateAccountMail, no need for doubble alloc !!!!
+
+			ActualMail->MailData->Size=*(DWORD *)(*Parser);
+			(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+			if(*Parser>=End)
+				return EACC_FILECOMPATIBILITY;
+			ActualMail->Flags=*(DWORD *)(*Parser);
+			(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+			if(*Parser>=End)
+				return EACC_FILECOMPATIBILITY;
+			ActualMail->Number=*(DWORD *)(*Parser);
+			(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+			if(*Parser>=End)
+				return EACC_FILECOMPATIBILITY;
+
+			if((NULL!=Which->Plugin->MailFcn) && (NULL!=Which->Plugin->MailFcn->ReadMailOptsFcnPtr))
+				Which->Plugin->MailFcn->ReadMailOptsFcnPtr(ActualMail,Parser,End);	//read plugin mail settings from file
+
+			do
+			{
+#ifdef DEBUG_FILEREADMESSAGES
+				if(Stat=ReadStringFromMemory(Parser,End,&ReadString,_T("Name")))
+#else
+				if(Stat=ReadStringFromMemory(Parser,End,&ReadString))
+#endif
+					return Stat;
+				if(ReadString==NULL)
+					break;
+
+#ifdef DEBUG_DECODE
+				DebugLog(DecodeFile,"<read name>%s</read name>",ReadString);
+#endif
+
+				if(items==NULL)
+					items=ActualMail->MailData->TranslatedHeader=new struct CMimeItem;
+				else
+				{
+					items->Next=new struct CMimeItem;
+					items=items->Next;
+				}
+				if(items==NULL)
+					return EACC_ALLOC;
+				items->name=ReadString;
+
+#ifdef DEBUG_FILEREADMESSAGES
+				if(Stat=ReadStringFromMemory(Parser,End,&ReadString,_T("Value")))
+#else
+				if(Stat=ReadStringFromMemory(Parser,End,&ReadString))
+#endif
+					return Stat;
+				items->value=ReadString;
+#ifdef DEBUG_DECODE
+				DebugLog(DecodeFile,"<read value>%s</read value>\n",ReadString);
+#endif
+			}while(1);
+		}
+		else
+			break;		//no next messages, new account!
+
+	}while(1);
+	(*Parser)++;
+	return 0;
+}
+
+DWORD ReadAccountFromMemory(HACCOUNT Which,TCHAR **Parser,TCHAR *End)
+{
+	DWORD Stat;
+#ifdef DEBUG_FILEREAD
+	TCHAR Debug[65536];
+#endif
+//Read name of account	
+#ifdef DEBUG_FILEREAD
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Name,_T("Name")))
+#else
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Name))
+#endif
+		return Stat;
+	if(Which->Name==NULL)
+		return EACC_FILECOMPATIBILITY;
+
+//Read server parameters
+#ifdef	DEBUG_FILEREAD
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Server->Name,_T("Server")))
+#else
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Server->Name))
+#endif
+		return Stat;
+	Which->Server->Port=*(WORD *)(*Parser);
+	(*Parser)+=sizeof(WORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef	DEBUG_FILEREAD
+	_stprintf(Debug,_T("Port: %d, remaining %d chars"),Which->Server->Port,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+#ifdef	DEBUG_FILEREAD
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Server->Login,_T("Login")))
+#else
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Server->Login))
+#endif
+		return Stat;
+#ifdef	DEBUG_FILEREAD
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Server->Passwd,_T("Password")))
+#else
+	if(Stat=ReadStringFromMemory(Parser,End,&Which->Server->Passwd))
+#endif
+		return Stat;
+	CodeDecodeString(Which->Server->Passwd,FALSE);
+
+//Read account flags
+	Which->Flags=*(DWORD *)(*Parser);
+	(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("Flags: %04x, remaining %d chars"),Which->Flags,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->StatusFlags=*(DWORD *)(*Parser);
+	(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("STFlags: %04x, remaining %d chars"),Which->StatusFlags,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->PluginFlags=*(DWORD *)(*Parser);
+	(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("PFlags: %04x, remaining %d chars"),Which->PluginFlags,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+
+//Read account miscellaneous parameters
+	Which->Interval=*(WORD *)(*Parser);
+	Which->TimeLeft=Which->Interval;		//check on loading
+	(*Parser)+=sizeof(WORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("Interval: %d, remaining %d chars"),Which->Interval,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+
+//Read notification parameters
+	if(Stat=ReadNotificationFromMemory(Parser,End,&Which->NewMailN))
+		return Stat;
+	if(Stat=ReadNotificationFromMemory(Parser,End,&Which->NoNewMailN))
+		return Stat;
+	if(Stat=ReadNotificationFromMemory(Parser,End,&Which->BadConnectN))
+		return Stat;
+
+//Let plugin read its own data stored in file
+	if(Which->Plugin->Fcn!=NULL && Which->Plugin->Fcn->ReadPluginOptsFcnPtr!=NULL)
+		if(Stat=Which->Plugin->Fcn->ReadPluginOptsFcnPtr(Which,Parser,End))
+			return Stat;
+//Read mails
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ReadAccountFromMemory:ActualAccountMsgsSO-write wait\n");
+#endif
+	WaitToWriteFcn(Which->MessagesAccessSO);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ReadAccountFromMemory:ActualAccountMsgsSO-write enter\n");
+#endif
+	if(Stat=ReadMessagesFromMemory(Which,Parser,End))
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"ReadAccountFromMemory:ActualAccountMsgsSO-write done\n");
+#endif
+		WriteDoneFcn(Which->MessagesAccessSO);
+		return Stat;
+	}
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ReadAccountFromMemory:ActualAccountMsgsSO-write done\n");
+#endif
+	WriteDoneFcn(Which->MessagesAccessSO);
+
+//Read timestamps
+	Which->LastChecked=*(SYSTEMTIME *)(*Parser);
+	(*Parser)+=sizeof(SYSTEMTIME)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("LastChecked: %04x, remaining %d chars"),Which->LastChecked,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->LastSChecked=*(SYSTEMTIME *)(*Parser);
+	(*Parser)+=sizeof(SYSTEMTIME)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("LastSChecked: %04x, remaining %d chars"),Which->LastSChecked,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->LastSynchronised=*(SYSTEMTIME *)(*Parser);
+	(*Parser)+=sizeof(SYSTEMTIME)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("LastSynchronised: %04x, remaining %d chars"),Which->LastSynchronised,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	Which->LastMail=*(SYSTEMTIME *)(*Parser);
+	(*Parser)+=sizeof(SYSTEMTIME)/sizeof(TCHAR);
+	if(*Parser>End)		//WARNING! There's only > at the end of testing
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("LastMail: %04x, remaining %d chars"),Which->LastMail,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	if(*Parser==End)
+		return EACC_ENDOFFILE;
+	return 0;
+		
+}
+
+static INT_PTR PerformAccountReading(HYAMNPROTOPLUGIN Plugin,TCHAR *MemFile,TCHAR *End)
+{
+//Retrieve info for account from memory
+	TCHAR *Parser;
+	DWORD Ver,Stat;
+
+	HACCOUNT ActualAccount,FirstAllocatedAccount;
+
+	Ver=*(DWORD *)MemFile;
+	if(Ver>YAMN_ACCOUNTFILEVERSION)
+	{
+		delete[] MemFile;
+		return EACC_FILEVERSION;
+	}
+	Parser=MemFile+sizeof(Ver)/sizeof(TCHAR);
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"AddAccountsFromFile:AccountBrowserSO-write wait\n");
+#endif
+	SWMRGWaitToWrite(Plugin->AccountBrowserSO,INFINITE);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"AddAccountsFromFile:AccountBrowserSO-write enter\n");
+#endif
+	if(NULL==(ActualAccount=(HACCOUNT)CallService(MS_YAMN_GETNEXTFREEACCOUNT,(WPARAM)Plugin,(LPARAM)YAMN_ACCOUNTVERSION)))
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"AddAccountsFromFile:AccountBrowserSO-write done\n");
+#endif
+		SWMRGDoneWriting(Plugin->AccountBrowserSO);
+		delete[] MemFile;
+		return EACC_ALLOC;
+	}
+	FirstAllocatedAccount=ActualAccount;
+	
+	do
+	{
+		HACCOUNT Temp;
+
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"AddAccountsFromFile:ActualAccountSO-write wait\n");
+#endif
+		WaitToWriteFcn(ActualAccount->AccountAccessSO);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"AddAccountsFromFile:ActualAccountSO-write enter\n");
+#endif
+		Stat=ReadAccountFromMemory(ActualAccount,&Parser,End);
+
+		if(ActualAccount->StatusFlags & (YAMN_ACC_STARTA | YAMN_ACC_STARTS))
+			ActualAccount->TimeLeft=1;		//check on loading
+
+		if(Stat && (Stat!=EACC_ENDOFFILE))
+		{
+			for(ActualAccount=FirstAllocatedAccount;ActualAccount!=NULL;ActualAccount=Temp)
+			{
+				Temp=ActualAccount->Next;
+				delete ActualAccount;
+			}
+			delete[] MemFile;
+			if(Plugin->FirstAccount==FirstAllocatedAccount)
+				Plugin->FirstAccount=NULL;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"AddAccountsFromFile:ActualAccountSO-write done\n");
+#endif
+			SWMRGDoneWriting(Plugin->AccountBrowserSO);
+			return (INT_PTR)Stat;
+		}
+		
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"AddAccountsFromFile:ActualAccountSO-write done\n");
+#endif
+		WriteDoneFcn(ActualAccount->AccountAccessSO);
+
+		if((Stat!=EACC_ENDOFFILE) && (NULL==(ActualAccount=(HACCOUNT)CallService(MS_YAMN_GETNEXTFREEACCOUNT,(WPARAM)Plugin,(LPARAM)YAMN_ACCOUNTVERSION))))
+		{
+			for(ActualAccount=FirstAllocatedAccount;ActualAccount!=NULL;ActualAccount=Temp)
+			{
+				Temp=ActualAccount->Next;
+				delete ActualAccount;
+			}
+			delete[] MemFile;
+			if(Plugin->FirstAccount==FirstAllocatedAccount)
+				Plugin->FirstAccount=NULL;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"AddAccountsFromFile:AccountBrowserSO-write done\n");
+#endif
+			SWMRGDoneWriting(Plugin->AccountBrowserSO);
+			return EACC_ALLOC;
+		}
+	}while(Stat!=EACC_ENDOFFILE);
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"AddAccountsFromFile:AccountBrowserSO-write done\n");
+#endif
+	SWMRGDoneWriting(Plugin->AccountBrowserSO);
+	delete[] MemFile;
+
+	return 0;
+}
+
+INT_PTR AddAccountsFromFileASvc(WPARAM wParam,LPARAM lParam)
+//Add accounts from file to memory
+{
+	DWORD Stat;
+	TCHAR *MemFile,*End;
+
+	if(Stat=FileToMemoryA((char *)lParam,&MemFile,&End))
+		return (INT_PTR)Stat;
+
+	return PerformAccountReading((HYAMNPROTOPLUGIN)wParam,MemFile,End);
+
+}
+
+INT_PTR AddAccountsFromFileWSvc(WPARAM wParam,LPARAM lParam)
+//Add accounts from file to memory
+{
+	DWORD Stat;
+	TCHAR *MemFile,*End;
+
+	if(Stat=FileToMemoryW((WCHAR *)lParam,&MemFile,&End))
+		return (INT_PTR)Stat;
+
+	return PerformAccountReading((HYAMNPROTOPLUGIN)wParam,MemFile,End);
+
+}
+
+DWORD WriteStringToFile(HANDLE File,TCHAR *Source)
+{
+	DWORD Length,WrittenBytes;
+	TCHAR null=(TCHAR)0;
+
+	if((Source==NULL) || !(Length=(DWORD)_tcslen(Source)))
+	{
+		if(!WriteFile(File,&null,sizeof(TCHAR),&WrittenBytes,NULL))
+		{
+			CloseHandle(File);
+			return EACC_SYSTEM;
+		}
+	}
+	else if(!WriteFile(File,Source,(Length+1)*sizeof(TCHAR),&WrittenBytes,NULL))
+	{
+		CloseHandle(File);
+		return EACC_SYSTEM;
+	}
+	return 0;
+}
+
+#ifndef UNICODE
+DWORD WriteStringToFileW(HANDLE File,WCHAR *Source)
+{
+	DWORD Length,WrittenBytes;
+	WCHAR null=(WCHAR)0;
+
+	if((Source==NULL) || !(Length=(DWORD)wcslen(Source)))
+	{
+		if(!WriteFile(File,&null,sizeof(WCHAR),&WrittenBytes,NULL))
+		{
+			CloseHandle(File);
+			return EACC_SYSTEM;
+		}
+	}
+	else if(!WriteFile(File,Source,(Length+1)*sizeof(WCHAR),&WrittenBytes,NULL))
+		return EACC_SYSTEM;
+	return 0;
+}
+#endif
+
+DWORD WriteMessagesToFile(HANDLE File,HACCOUNT Which)
+{
+	DWORD WrittenBytes,Stat;
+	HYAMNMAIL ActualMail=(HYAMNMAIL)Which->Mails;
+	struct CMimeItem *items;
+
+	while(ActualMail!=NULL)
+	{
+		if(Stat=WriteStringToFile(File,ActualMail->ID))
+			return Stat;
+		if(!WriteFile(File,(char *)&ActualMail->MailData->Size,sizeof(ActualMail->MailData->Size),&WrittenBytes,NULL) ||
+			!WriteFile(File,(char *)&ActualMail->Flags,sizeof(ActualMail->Flags),&WrittenBytes,NULL) ||
+			!WriteFile(File,(char *)&ActualMail->Number,sizeof(ActualMail->Number),&WrittenBytes,NULL))
+			return EACC_SYSTEM;
+		if((NULL!=Which->Plugin->MailFcn) && (NULL!=Which->Plugin->MailFcn->WriteMailOptsFcnPtr))
+			Which->Plugin->MailFcn->WriteMailOptsFcnPtr(File,ActualMail);	//write plugin mail options to file
+		for(items=ActualMail->MailData->TranslatedHeader;items!=NULL;items=items->Next)
+		{
+			if(Stat=WriteStringToFile(File,items->name))
+				return Stat;
+			if(Stat=WriteStringToFile(File,items->value))
+				return Stat;
+		}		
+		if(Stat=WriteStringToFile(File,_T("")))
+			return Stat;
+		ActualMail=ActualMail->Next;
+	}
+	if(Stat=WriteStringToFile(File,_T("")))
+		return Stat;
+	return 0;
+}
+
+static INT_PTR PerformAccountWriting(HYAMNPROTOPLUGIN Plugin,HANDLE File)
+{
+	DWORD WrittenBytes,Stat;
+	HACCOUNT ActualAccount;
+	DWORD Ver=YAMN_ACCOUNTFILEVERSION;
+	BOOL Writed=FALSE;
+	DWORD ReturnValue=0,EnterCode;
+	
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"WriteAccountsToFile:AccountBrowserSO-read wait\n");
+#endif
+	SWMRGWaitToRead(Plugin->AccountBrowserSO,INFINITE);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"WriteAccountsToFile:AccountBrowserSO-read enter\n");
+#endif
+	try
+	{
+		for(ActualAccount=Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=ActualAccount->Next)
+		{
+/*			TCHAR DEBUG[100];
+			Beep(3000,100);Sleep(200);
+			_stprintf(DEBUG,_T("Browsing account %s"),ActualAccount->Name==NULL ? _T("(null)") : ActualAccount->Name);
+			MessageBox(NULL,DEBUG,_T("debug- WriteAccount..."),MB_OK);
+*/
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountSO-read wait\n");
+#endif
+			EnterCode=WaitToReadFcn(ActualAccount->AccountAccessSO);
+			if(EnterCode==WAIT_FINISH)		//account is about to delete
+			{
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountSO-read wait failed\n");
+#endif
+				ActualAccount=ActualAccount->Next;
+				continue;
+			}
+			if(EnterCode==WAIT_FAILED)		//account is deleted
+				break;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountSO-read enter\n");
+#endif
+			if((ActualAccount->Name==NULL) || (*ActualAccount->Name==(TCHAR)0))
+			{
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountSO-read done\n");
+#endif
+				ReadDoneFcn(ActualAccount->AccountAccessSO);
+				continue;
+			}
+
+			if(!Writed && !WriteFile(File,&Ver,sizeof(Ver),&WrittenBytes,NULL))
+				throw (DWORD)EACC_SYSTEM;
+			Writed=TRUE;
+
+			if(Stat=WriteStringToFile(File,ActualAccount->Name))
+				throw (DWORD)Stat;
+
+			if(Stat=WriteStringToFile(File,ActualAccount->Server->Name))
+				throw (DWORD)Stat;
+
+			if(!WriteFile(File,(char *)&ActualAccount->Server->Port,2,&WrittenBytes,NULL))
+				throw (DWORD)EACC_SYSTEM;
+
+			if((Stat=WriteStringToFile(File,ActualAccount->Server->Login)))
+				throw (DWORD)Stat;
+
+			CodeDecodeString(ActualAccount->Server->Passwd,TRUE);
+
+			if(Stat=WriteStringToFile(File,ActualAccount->Server->Passwd))
+			{
+				CodeDecodeString(ActualAccount->Server->Passwd,FALSE);
+				throw (DWORD)Stat;
+			}
+			CodeDecodeString(ActualAccount->Server->Passwd,FALSE);
+
+			if((!WriteFile(File,(char *)&ActualAccount->Flags,sizeof(DWORD),&WrittenBytes,NULL) ||
+				(!WriteFile(File,(char *)&ActualAccount->StatusFlags,sizeof(DWORD),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->PluginFlags,sizeof(DWORD),&WrittenBytes,NULL))))
+				throw (DWORD)EACC_SYSTEM;
+
+			if(!WriteFile(File,(char *)&ActualAccount->Interval,sizeof(WORD),&WrittenBytes,NULL))
+				throw (DWORD)EACC_SYSTEM;
+
+			if((!WriteFile(File,(char *)&ActualAccount->NewMailN.Flags,sizeof(DWORD),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->NewMailN.PopUpB,sizeof(COLORREF),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->NewMailN.PopUpT,sizeof(COLORREF),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->NewMailN.PopUpTime,sizeof(DWORD),&WrittenBytes,NULL)))
+				throw (DWORD)EACC_SYSTEM;
+
+			if((Stat=WriteStringToFileW(File,ActualAccount->NewMailN.App)) ||
+				(Stat=WriteStringToFileW(File,ActualAccount->NewMailN.AppParam)))
+				throw (DWORD)Stat;
+
+			if((!WriteFile(File,(char *)&ActualAccount->NoNewMailN.Flags,sizeof(DWORD),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->NoNewMailN.PopUpB,sizeof(COLORREF),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->NoNewMailN.PopUpT,sizeof(COLORREF),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->NoNewMailN.PopUpTime,sizeof(DWORD),&WrittenBytes,NULL)))
+				throw (DWORD)EACC_SYSTEM;
+
+			if((Stat=WriteStringToFileW(File,ActualAccount->NoNewMailN.App)) ||
+				(Stat=WriteStringToFileW(File,ActualAccount->NoNewMailN.AppParam)))
+				throw (DWORD)Stat;
+
+			if((!WriteFile(File,(char *)&ActualAccount->BadConnectN.Flags,sizeof(DWORD),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->BadConnectN.PopUpB,sizeof(COLORREF),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->BadConnectN.PopUpT,sizeof(COLORREF),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->BadConnectN.PopUpTime,sizeof(DWORD),&WrittenBytes,NULL)))
+				throw (DWORD)EACC_SYSTEM;
+
+			if((Stat=WriteStringToFileW(File,ActualAccount->BadConnectN.App)) ||
+				(Stat=WriteStringToFileW(File,ActualAccount->BadConnectN.AppParam)))
+				throw (DWORD)Stat;
+
+//Let plugin write its own values into file
+			if(ActualAccount->Plugin->Fcn!=NULL && ActualAccount->Plugin->Fcn->WritePluginOptsFcnPtr!=NULL)
+				if(Stat=ActualAccount->Plugin->Fcn->WritePluginOptsFcnPtr(File,ActualAccount))
+					throw (DWORD)Stat;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountMsgsSO-read wait\n");
+#endif
+			WaitToReadFcn(ActualAccount->MessagesAccessSO);
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountMsgsSO-read enter\n");
+#endif
+			if(Stat=WriteMessagesToFile(File,ActualAccount))
+			{
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountMsgsSO-read done\n");
+#endif
+				ReadDoneFcn(ActualAccount->MessagesAccessSO);
+				throw (DWORD)Stat;
+			}
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountMsgsSO-read done\n");
+#endif
+			ReadDoneFcn(ActualAccount->MessagesAccessSO);
+
+			if((!WriteFile(File,(char *)&ActualAccount->LastChecked,sizeof(SYSTEMTIME),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->LastSChecked,sizeof(SYSTEMTIME),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->LastSynchronised,sizeof(SYSTEMTIME),&WrittenBytes,NULL)) ||
+				(!WriteFile(File,(char *)&ActualAccount->LastMail,sizeof(SYSTEMTIME),&WrittenBytes,NULL)))
+				throw (DWORD)Stat;
+
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountSO-read done\n");
+#endif
+			ReadDoneFcn(ActualAccount->AccountAccessSO);
+		}
+	}
+	catch(DWORD ErrorCode)
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"WriteAccountsToFile:ActualAccountSO-read done\n");
+#endif
+		ReadDoneFcn(ActualAccount->AccountAccessSO);
+		ReturnValue=ErrorCode;
+	}
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"WriteAccountsToFile:AccountBrowserSO-read done\n");
+#endif
+	SWMRGDoneReading(Plugin->AccountBrowserSO);
+	CloseHandle(File);
+	return 0;
+}
+
+INT_PTR WriteAccountsToFileASvc(WPARAM wParam,LPARAM lParam)
+//Writes accounts to file
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	char *FileName=(char *)lParam;
+
+	HANDLE File;
+
+	EnterCriticalSection(FileWritingCS);
+	if(INVALID_HANDLE_VALUE==(File=CreateFileA(FileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)))
+	{
+		LeaveCriticalSection(FileWritingCS);
+		return EACC_SYSTEM;
+	}
+	LeaveCriticalSection(FileWritingCS);
+
+	return PerformAccountWriting(Plugin,File);
+}
+
+INT_PTR WriteAccountsToFileWSvc(WPARAM wParam,LPARAM lParam)
+//Writes accounts to file
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	WCHAR *FileName=(WCHAR *)lParam;
+	INT_PTR rv;
+
+	HANDLE File;
+
+	EnterCriticalSection(FileWritingCS);
+	if(INVALID_HANDLE_VALUE==(File=CreateFileW(FileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)))
+	{
+		LeaveCriticalSection(FileWritingCS);
+		return EACC_SYSTEM;
+	}
+
+	rv=PerformAccountWriting(Plugin,File);
+
+	LeaveCriticalSection(FileWritingCS);
+
+	return rv;
+}
+
+INT_PTR FindAccountByNameSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	TCHAR *SearchedAccount=(TCHAR *)lParam;
+	HACCOUNT Finder;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"FindAccountByName:AccountBrowserSO-read wait\n");
+#endif
+	SWMRGWaitToRead(Plugin->AccountBrowserSO,INFINITE);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"FindAccountByName:AccountBrowserSO-read enter\n");
+#endif
+	for(Finder=Plugin->FirstAccount;Finder!=NULL;Finder=Finder->Next)
+		if((Finder->Name!=NULL) && (0==_tcscmp(SearchedAccount,Finder->Name)))
+			break;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"FindAccountByName:AccountBrowserSO-read done\n");
+#endif
+	SWMRGDoneReading(Plugin->AccountBrowserSO);
+	return (INT_PTR)Finder; 
+}
+
+INT_PTR GetNextFreeAccountSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	HACCOUNT Finder;
+
+	if(Plugin->FirstAccount==NULL)
+	{
+		Plugin->FirstAccount=(HACCOUNT)CallService(MS_YAMN_CREATEPLUGINACCOUNT,wParam,lParam);
+		return (INT_PTR)Plugin->FirstAccount;
+	}
+	for(Finder=Plugin->FirstAccount;Finder->Next!=NULL;Finder=Finder->Next);
+	Finder->Next=(HACCOUNT)CallService(MS_YAMN_CREATEPLUGINACCOUNT,wParam,lParam);
+	return (INT_PTR)Finder->Next;
+}
+
+/*
+int FindPluginAccount(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	HACCOUNT Finder=(HACCOUNT)lParam;
+
+	if(Finder=NULL)	Finder=Plugin->FirstAccount;
+
+//	for(;Finder!=NULL && Finder->PluginID!=Plugin->PluginInfo->PluginID;Finder=(HACCOUNT)Finder->Next);
+	return (int)Finder;
+}
+*/
+INT_PTR DeleteAccountSvc(WPARAM wParam,LPARAM lParam)
+{
+//Deleting account works on these steps:
+//1. set signal that account should stop activity (set event)
+//	setting this event we achieve, that any access to account is failed,
+//	so threads do not start any work with accounts (better saying threads of plugins should not start)
+//2. wait to get write access to chained list of accounts
+//3. we can write to chained list, so we change chain not to show to actual account
+//	now, any thread browsing list of accounts does not browse through actual account
+//	actual account seems to be hidden (it exists, but it is not in accounts chained list (chained list=queue))
+//Now, we should delete account from memory, BUT!!!
+//	Any thread can still be waked up and start asking account synchronizing object
+//	If account is deleted, asking about access to read account can throw memory exception (reading for
+//	a synchronizing object from memory, that was deleted)
+//So, we cannot now delete account. We have to wait until we are sure no thread will be using account anymore
+//	(or to the end of Miranda, but problem is in allocated memory- it is allocated and Miranda is SMALLER, faster, easier, isn't it?)
+//	This deleting is achieved in 2 ways:
+//	We have event in UsingThreads synchronization objects. This event signals that no thread will use actual account
+//	1. Any thread using account first increment UsingThread, so we know that account is used
+//	2. If thread is about to close, it should decrement UsingThread
+//	3. If thread creates another thread, that will use account, caller has to wait until the new thread does not
+//		increment UsingThreads (imagine that caller ends before the new thread set it: if no other thread is using
+//		account, account is automaticaly (decreasing UsingThreads) signaled as "not used" and we delete it. But then
+//		new thread is going to read account...).
+//4. wait until UsingThread Event is signaled
+//5. delete account from memory
+
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	HACCOUNT Which=(HACCOUNT)lParam;
+	HACCOUNT Finder;
+	DWORD tid;
+
+//1. set stop signal 
+	StopSignalFcn(Which);
+	WindowList_BroadcastAsync(YAMNVar.MessageWnds,WM_YAMN_STOPACCOUNT,(WPARAM)Which,(LPARAM)0);
+	if(Plugin->Fcn->StopAccountFcnPtr!=NULL)
+		Plugin->Fcn->StopAccountFcnPtr(Which);
+
+//2. wait to get write access
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteAccount:AccountBrowserSO-write wait\n");
+#endif
+	SWMRGWaitToWrite(Plugin->AccountBrowserSO,INFINITE);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteAccount:AccountBrowserSO-write enter\n");
+#endif
+
+//3. remove from queue (chained list)
+	if(Plugin->FirstAccount==NULL)
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteAccount:AccountBrowserSO-write done\n");
+#endif
+		SWMRGDoneWriting(Plugin->AccountBrowserSO);
+		return 0;
+	}
+	if(Plugin->FirstAccount==Which)
+	{
+		Finder=Plugin->FirstAccount->Next;
+		Plugin->FirstAccount=Finder;
+	}
+	else
+	{
+		for(Finder=Plugin->FirstAccount;Which!=Finder->Next;Finder=Finder->Next);
+		Finder->Next=Finder->Next->Next;
+	}
+//leave write access
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteAccount:AccountBrowserSO-write done\n");
+#endif
+	SWMRGDoneWriting(Plugin->AccountBrowserSO);
+
+//4. wait while event "UsingThread" is not signaled
+//	And what to do, if this event will be signaled in 1 hour? (Although it's paranoia, because we have sent "delete signal", so
+//	other threads do not start any new work with actual account) We will wait in blocked state?
+//	No, of course not. We will create new thread, that will wait and additionally remove our thread in background.
+//5. So, the last point (deleting from memory) is performed in new DeleteAccountInBackground thread
+
+	if((Plugin->Fcn!=NULL) && (Plugin->Fcn->WriteAccountsFcnPtr!=NULL))
+			Plugin->Fcn->WriteAccountsFcnPtr();
+	CloseHandle(CreateThread(NULL,0,DeleteAccountInBackground,(LPVOID)Which,0,&tid));
+
+//Now, plugin can consider account as deleted, but plugin really can achieve deleting this account from memory when using
+//event UsingThreads.
+	return 1;
+}
+
+DWORD WINAPI DeleteAccountInBackground(LPVOID Value)
+{
+	HACCOUNT Which=(HACCOUNT)Value;
+	WaitForSingleObject(Which->UsingThreads->Event,INFINITE);
+	CallService(MS_YAMN_DELETEPLUGINACCOUNT,(WPARAM)Which,(LPARAM)0);
+	return 0;
+}
+
+int StopAccounts(HYAMNPROTOPLUGIN Plugin)
+{
+	HACCOUNT Finder;
+
+//1. wait to get write access
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"StopAccounts:AccountBrowserSO-write wait\n");
+#endif
+	SWMRGWaitToWrite(Plugin->AccountBrowserSO,INFINITE);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"StopAccounts:AccountBrowserSO-write enter\n");
+#endif
+	for(Finder=Plugin->FirstAccount;Finder!=NULL;Finder=Finder->Next)
+	{
+//2. set stop signal 
+		StopSignalFcn(Finder);
+		WindowList_BroadcastAsync(YAMNVar.MessageWnds,WM_YAMN_STOPACCOUNT,(WPARAM)Finder,(LPARAM)0);
+		if(Plugin->Fcn->StopAccountFcnPtr!=NULL)
+			Plugin->Fcn->StopAccountFcnPtr(Finder);
+	}
+
+//leave write access
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"StopAccounts:AccountBrowserSO-write done\n");
+#endif
+	SWMRGDoneWriting(Plugin->AccountBrowserSO);
+
+//Now, account is stopped. It can be removed from memory...
+	return 1;
+}
+
+int WaitForAllAccounts(HYAMNPROTOPLUGIN Plugin,BOOL GetAccountBrowserAccess)
+{
+	HACCOUNT Finder;
+
+	if(GetAccountBrowserAccess)
+	{
+//1. wait to get write access
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"WaitForAllAccounts:AccountBrowserSO-write wait\n");
+#endif
+		SWMRGWaitToWrite(Plugin->AccountBrowserSO,INFINITE);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"WaitForAllAccounts:AccountBrowserSO-write enter\n");
+#endif
+	}
+	for(Finder=Plugin->FirstAccount;Finder!=NULL;Finder=Finder->Next)
+	{
+//2. wait for signal that account is not in use
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"WaitForAllAccounts:waiting for UsingThreadEV %x (account %x)\n",Finder->UsingThreads,Finder);
+#endif
+		WaitForSingleObject(Finder->UsingThreads->Event,INFINITE);
+		SetEvent(Finder->UsingThreads->Event);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"WaitForAllAccounts:UsingThreadEV signaled\n");
+#endif
+	}
+	if(GetAccountBrowserAccess)
+	{
+//leave write access
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"WaitForAllAccounts:AccountBrowserSO-write done\n");
+#endif
+		SWMRGDoneWriting(Plugin->AccountBrowserSO);
+	}
+
+	return 1;
+}
+
+int DeleteAccounts(HYAMNPROTOPLUGIN Plugin)
+{
+	HACCOUNT Finder;
+
+	//1. wait to get write access
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteAccounts:AccountBrowserSO-write wait\n");
+	#endif
+	SWMRGWaitToWrite(Plugin->AccountBrowserSO,INFINITE);
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteAccounts:AccountBrowserSO-write enter\n");
+	#endif
+
+	WaitForAllAccounts(Plugin,FALSE);
+
+	for(Finder=Plugin->FirstAccount;Finder!=NULL;)
+	{
+		HACCOUNT Next = Finder->Next;
+		DeletePluginAccountSvc((WPARAM)Finder,(LPARAM)0);
+		Finder = Next;
+	}
+
+	//leave write access
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteAccounts:AccountBrowserSO-write done\n");
+	#endif
+	SWMRGDoneWriting(Plugin->AccountBrowserSO);
+
+	return 1;
+}
+
+void WINAPI GetStatusFcn(HACCOUNT Which,char *Value)
+{
+	if(Which==NULL)
+		return;
+	
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tGetStatus:AccountStatusCS-cs wait\n");
+#endif
+	EnterCriticalSection(AccountStatusCS);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tGetStatus:AccountStatusCS-cs enter\n");
+#endif
+	lstrcpy(Value,Which->Status);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tGetStatus:AccountStatusCS-cs done\n");
+#endif
+	LeaveCriticalSection(AccountStatusCS);
+	return;
+}
+
+void WINAPI SetStatusFcn(HACCOUNT Which,char *Value)
+{
+	if(Which==NULL)
+		return;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSetStatus:AccountStatusCS-cs wait\n");
+#endif
+	EnterCriticalSection(AccountStatusCS);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSetStatus:AccountStatusCS-cs enter\n");
+#endif
+	lstrcpy(Which->Status,Value);
+	WindowList_BroadcastAsync(YAMNVar.MessageWnds,WM_YAMN_CHANGESTATUS,(WPARAM)Which,(LPARAM)0);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSetStatus:AccountStatusCS-cs done\n");
+#endif
+	LeaveCriticalSection(AccountStatusCS);
+}
+
+/*
+#ifdef DEBUG_ACCOUNTS
+int GetAccounts()
+{
+	HACCOUNT Finder;
+	int cnt=0;
+
+	for(Finder=Account;Finder!=NULL;Finder=Finder->Next)
+		cnt++;
+	return cnt;
+}
+
+void WriteAccounts()
+{
+	HACCOUNT Finder;
+
+	for(Finder=Account;Finder!=NULL;Finder=Finder->Next)
+		MessageBoxA(NULL,Finder->Name,"Browsing account",MB_OK);
+}
+#endif
+*/
diff --git a/plugins/YAMN/browser/badconnect.cpp b/plugins/YAMN/browser/badconnect.cpp
new file mode 100644
index 0000000000..4640488cb6
--- /dev/null
+++ b/plugins/YAMN/browser/badconnect.cpp
@@ -0,0 +1,391 @@
+/*
+ * This code implements window handling (connection error)
+ *
+ * (c) majvan 2002,2004
+ */
+#include <windows.h>
+#include <stdio.h>
+#include <newpluginapi.h>
+#include <m_utils.h>
+#include <m_skin.h>
+#include <m_langpack.h>
+#include <m_database.h>
+#include <m_popup.h>
+#include "../main.h"
+#include "m_protoplugin.h"
+#include "m_account.h"
+#include "../debug.h"
+#include "m_messages.h"
+#include "../mails/m_mails.h"
+#include "m_yamn.h"
+#include "../resources/resource.h"
+#include "m_browser.h"
+#include <win2k.h>
+
+#define BADCONNECTTITLE "%s - connection error"
+#define BADCONNECTMSG "An error occured. Error code: %d"
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+extern YAMN_VARIABLES YAMNVar;
+
+//From synchro.cpp
+extern DWORD WINAPI WaitToWriteFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+extern void WINAPI WriteDoneFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+extern DWORD WINAPI WaitToReadFcn(PSWMRG SObject);
+extern void WINAPI ReadDoneFcn(PSWMRG SObject);
+extern DWORD WINAPI SCIncFcn(PSCOUNTER SCounter);
+extern DWORD WINAPI SCDecFcn(PSCOUNTER SCounter);
+
+
+extern HICON hYamnIcons[];
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//Window callback procedure for popup window (created by popup plugin)
+LRESULT CALLBACK BadConnectPopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) ;
+
+//Dialog callback procedure for bad connection message
+LRESULT CALLBACK DlgProcYAMNBadConnection(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+
+//BadConnection thread function creates window for BadConnection message
+DWORD WINAPI BadConnection(LPVOID Param);
+
+INT_PTR RunBadConnectionSvc(WPARAM wParam,LPARAM lParam);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+LRESULT CALLBACK BadConnectPopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) 
+{
+	DWORD PluginParam;
+	switch(msg)
+	{
+		case WM_COMMAND:
+			if((HIWORD(wParam)==STN_CLICKED) && (CallService(MS_POPUP_GETPLUGINDATA,(WPARAM)hWnd,(LPARAM)&PluginParam)))	//if clicked and it's new mail popup window
+			{
+				PROCESS_INFORMATION pi;
+				STARTUPINFOW si;
+				HACCOUNT ActualAccount;
+
+				ZeroMemory(&si,sizeof(si));
+				si.cb=sizeof(si);
+				ActualAccount=(HACCOUNT)CallService(MS_POPUP_GETCONTACT,(WPARAM)hWnd,(LPARAM)0);
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read wait\n");
+#endif
+				if(WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
+				{
+#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read enter\n");
+#endif
+					if(ActualAccount->BadConnectN.App!=NULL)
+					{
+						WCHAR *Command;
+						if(ActualAccount->BadConnectN.AppParam!=NULL)
+							Command=new WCHAR[wcslen(ActualAccount->BadConnectN.App)+wcslen(ActualAccount->BadConnectN.AppParam)+6];
+						else
+							Command=new WCHAR[wcslen(ActualAccount->BadConnectN.App)+6];
+	
+						if(Command!=NULL)
+						{
+							lstrcpyW(Command,L"\"");
+							lstrcatW(Command,ActualAccount->BadConnectN.App);
+							lstrcatW(Command,L"\" ");
+							if(ActualAccount->BadConnectN.AppParam!=NULL)
+								lstrcatW(Command,ActualAccount->BadConnectN.AppParam);
+							CreateProcessW(NULL,Command,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
+							delete[] Command;
+						}
+					}
+#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read done\n");
+#endif
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+				}
+#ifdef DEBUG_SYNCHRO
+				else
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read enter failed\n");
+#endif
+				SendMessage(hWnd,UM_DESTROYPOPUP,0,0);
+			}
+			break;
+		case UM_FREEPLUGINDATA:
+			//Here we'd free our own data, if we had it.
+			return FALSE;
+		case UM_INITPOPUP:
+			//This is the equivalent to WM_INITDIALOG you'd get if you were the maker of dialog popups.
+			break;
+		case WM_CONTEXTMENU:
+			SendMessage(hWnd,UM_DESTROYPOPUP,0,0);
+			break;
+		case WM_NOTIFY:
+/*			switch(((LPNMHDR)lParam)->code)
+			{
+				case NM_CLICK:
+				{
+				}
+			}
+			break;
+*/		default:
+			break;
+	}
+	return DefWindowProc(hWnd,msg,wParam,lParam);
+}
+
+LRESULT CALLBACK DlgProcYAMNBadConnection(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+		{
+			BOOL ShowPopUp,ShowMsg,ShowIco;
+			HACCOUNT ActualAccount;
+			DWORD ErrorCode;
+			char *TitleStrA;
+			char *Message1A=NULL;
+			WCHAR *Message1W=NULL;
+			POPUPDATAEX BadConnectPopUp;
+
+			ActualAccount=((struct BadConnectionParam *)lParam)->account;
+			ErrorCode=((struct BadConnectionParam *)lParam)->errcode;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read wait\n");
+#endif
+			if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+			{
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read wait failed\n");
+#endif
+				return FALSE;
+			}
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read enter\n");
+#endif
+			TitleStrA=new char[strlen(ActualAccount->Name)+strlen(Translate(BADCONNECTTITLE))];
+			sprintf(TitleStrA,Translate(BADCONNECTTITLE),ActualAccount->Name);
+
+			ShowPopUp=ActualAccount->BadConnectN.Flags & YAMN_ACC_POP;
+			ShowMsg=ActualAccount->BadConnectN.Flags & YAMN_ACC_MSG;
+			ShowIco=ActualAccount->BadConnectN.Flags & YAMN_ACC_ICO;
+
+			if(ShowPopUp)
+			{
+				BadConnectPopUp.lchContact=ActualAccount;
+				BadConnectPopUp.lchIcon=hYamnIcons[3];
+				BadConnectPopUp.colorBack=ActualAccount->BadConnectN.Flags & YAMN_ACC_POPC ? ActualAccount->BadConnectN.PopUpB : GetSysColor(COLOR_BTNFACE);
+				BadConnectPopUp.colorText=ActualAccount->BadConnectN.Flags & YAMN_ACC_POPC ? ActualAccount->BadConnectN.PopUpT : GetSysColor(COLOR_WINDOWTEXT);
+				BadConnectPopUp.iSeconds=ActualAccount->BadConnectN.PopUpTime;
+
+				BadConnectPopUp.PluginWindowProc=(WNDPROC)BadConnectPopUpProc;
+				BadConnectPopUp.PluginData=0;					//it's bad connect popup
+				lstrcpyn(BadConnectPopUp.lpzContactName,ActualAccount->Name,sizeof(BadConnectPopUp.lpzContactName));
+			}
+
+			if(ActualAccount->Plugin->Fcn!=NULL && ActualAccount->Plugin->Fcn->GetErrorStringWFcnPtr!=NULL)
+			{
+				Message1W=ActualAccount->Plugin->Fcn->GetErrorStringWFcnPtr(ErrorCode);
+				SendMessageW(GetDlgItem(hDlg,IDC_STATICMSG),WM_SETTEXT,(WPARAM)0,(LPARAM)Message1W);
+				WideCharToMultiByte(CP_ACP,0,Message1W,-1,(char *)BadConnectPopUp.lpzText,sizeof(BadConnectPopUp.lpzText),NULL,NULL);
+				if(ShowPopUp)
+					CallService(MS_POPUP_ADDPOPUPEX,(WPARAM)&BadConnectPopUp,0);
+			}
+			else if(ActualAccount->Plugin->Fcn!=NULL && ActualAccount->Plugin->Fcn->GetErrorStringAFcnPtr!=NULL)
+			{
+				Message1A=ActualAccount->Plugin->Fcn->GetErrorStringAFcnPtr(ErrorCode);
+				SendMessageA(GetDlgItem(hDlg,IDC_STATICMSG),WM_SETTEXT,(WPARAM)0,(LPARAM)Message1A);
+				lstrcpyn(BadConnectPopUp.lpzText,Message1A,sizeof(BadConnectPopUp.lpzText));
+				if(ShowPopUp)
+					CallService(MS_POPUP_ADDPOPUPEX,(WPARAM)&BadConnectPopUp,0);
+			}
+			else
+			{
+				Message1A=Translate("Unknown error");
+				SendMessageA(GetDlgItem(hDlg,IDC_STATICMSG),WM_SETTEXT,(WPARAM)0,(LPARAM)Message1A);
+				lstrcpyn(BadConnectPopUp.lpzText,Message1A,sizeof(BadConnectPopUp.lpzText));
+				if(ShowPopUp)
+					CallService(MS_POPUP_ADDPOPUPEX,(WPARAM)&BadConnectPopUp,0);
+			}
+
+			if(!ShowMsg && !ShowIco)
+				DestroyWindow(hDlg);
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read done\n");
+#endif
+			ReadDoneFcn(ActualAccount->AccountAccessSO);
+
+			SendMessage(hDlg,WM_SETTEXT,(WPARAM)0,(LPARAM)TitleStrA);
+			delete[] TitleStrA;
+			if(Message1A!=NULL)
+				delete[] Message1A;
+			if(ActualAccount->Plugin->Fcn!=NULL && ActualAccount->Plugin->Fcn->DeleteErrorStringFcnPtr!=NULL && Message1A!=NULL)
+				ActualAccount->Plugin->Fcn->DeleteErrorStringFcnPtr(Message1A);
+			if(ActualAccount->Plugin->Fcn!=NULL && ActualAccount->Plugin->Fcn->DeleteErrorStringFcnPtr!=NULL && Message1W!=NULL)
+				ActualAccount->Plugin->Fcn->DeleteErrorStringFcnPtr(Message1W);
+			return 0;
+		}
+		case WM_DESTROY:
+		{
+			NOTIFYICONDATA nid;
+
+			ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
+			nid.cbSize=sizeof(NOTIFYICONDATA);
+			nid.hWnd=hDlg;
+			nid.uID=0;
+			Shell_NotifyIcon(NIM_DELETE,&nid);
+			PostQuitMessage(0);
+			break;
+		}
+		case WM_YAMN_NOTIFYICON:
+			switch (lParam)
+			{
+				case WM_LBUTTONDBLCLK:
+				          ShowWindow(hDlg,SW_SHOWNORMAL);
+				          SetForegroundWindow(hDlg);
+				          break;
+			}
+			return 0;
+		case WM_CHAR:
+			switch((TCHAR)wParam)
+			{
+				case 27:
+				case 13:
+					DestroyWindow(hDlg);
+					break;
+			}
+			break;
+		case WM_SYSCOMMAND:
+			switch(wParam)
+			{
+				case SC_CLOSE:
+					DestroyWindow(hDlg);
+					break;
+			}
+		case WM_COMMAND:
+		{
+			WORD wNotifyCode = HIWORD(wParam);
+			switch(LOWORD(wParam))
+			{
+				case IDC_BTNOK:
+					DestroyWindow(hDlg);
+					break;
+			}
+			break;
+		}
+	}
+	return 0;
+}
+
+DWORD WINAPI BadConnection(LPVOID Param)
+{
+	MSG msg;
+	HWND hBadConnect;
+	HACCOUNT ActualAccount;
+	struct BadConnectionParam MyParam;
+	NOTIFYICONDATA nid;
+	TCHAR *NotIconText=Translate(" - connection error");
+	TCHAR *src,*dest;
+	int i;
+
+	MyParam=*(struct BadConnectionParam *)Param;
+	ActualAccount=MyParam.account;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"BadConnect:Incrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+#endif
+	SCIncFcn(ActualAccount->UsingThreads);
+
+//	we will not use params in stack anymore
+	SetEvent(MyParam.ThreadRunningEV);
+
+	__try
+	{
+		hBadConnect=CreateDialogParam(YAMNVar.hInst,MAKEINTRESOURCE(IDD_DLGBADCONNECT),NULL,(DLGPROC)DlgProcYAMNBadConnection,(LPARAM)&MyParam);
+		SendMessage(hBadConnect,WM_SETICON,ICON_BIG,(LPARAM)hYamnIcons[3]);
+		SendMessage(hBadConnect,WM_SETICON,ICON_SMALL,(LPARAM)hYamnIcons[3]);
+
+		ZeroMemory(&nid,sizeof(nid));
+		nid.cbSize=sizeof(NOTIFYICONDATA);
+		nid.hWnd=hBadConnect;
+		nid.hIcon=hYamnIcons[3];
+		nid.uID=0;
+		nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
+		nid.uCallbackMessage=WM_YAMN_NOTIFYICON;
+
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read wait\n");
+#endif
+		if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+		{
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read wait failed\n");
+#endif
+			return 0;
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read enter\n");
+#endif
+		for(src=ActualAccount->Name,dest=nid.szTip,i=0;(*src!=(TCHAR)0) && (i+1<sizeof(nid.szTip));*dest++=*src++);
+		for(src=NotIconText;(*src!=(TCHAR)0) && (i+1<sizeof(nid.szTip));*dest++=*src++);
+		*dest=(TCHAR)0;
+
+		if(ActualAccount->BadConnectN.Flags & YAMN_ACC_SND)
+			CallService(MS_SKIN_PLAYSOUND,0,(LPARAM)YAMN_CONNECTFAILSOUND);
+		if(ActualAccount->BadConnectN.Flags & YAMN_ACC_MSG)
+			ShowWindow(hBadConnect,SW_SHOWNORMAL);
+		if(ActualAccount->BadConnectN.Flags & YAMN_ACC_ICO)
+			Shell_NotifyIcon(NIM_ADD,&nid);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"BadConnect:ActualAccountSO-read done\n");
+#endif
+		ReadDoneFcn(ActualAccount->AccountAccessSO);
+
+		UpdateWindow(hBadConnect);
+		while(GetMessage(&msg,NULL,0,0))
+		{
+			TranslateMessage(&msg); 
+			DispatchMessage(&msg);  
+		}
+
+//	now, write to file. Why? Because we want to write when was new mail last checked
+		if((ActualAccount->Plugin->Fcn!=NULL) && (ActualAccount->Plugin->Fcn->WriteAccountsFcnPtr!=NULL) && ActualAccount->AbleToWork)
+			ActualAccount->Plugin->Fcn->WriteAccountsFcnPtr();
+	}
+	__finally
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"BadConnect:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+#endif
+		SCDecFcn(ActualAccount->UsingThreads);
+	}
+	return 0;
+}
+
+
+INT_PTR RunBadConnectionSvc(WPARAM wParam,LPARAM lParam)
+{
+	DWORD tid;
+//an event for successfull copy parameters to which point a pointer in stack for new thread
+	HANDLE ThreadRunningEV;
+	PYAMN_BADCONNECTIONPARAM Param=(PYAMN_BADCONNECTIONPARAM)wParam;
+
+	if((DWORD)lParam!=YAMN_BADCONNECTIONVERSION)
+		return 0;
+
+	if(NULL!=(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+	{
+		HANDLE NewThread;
+
+		Param->ThreadRunningEV=ThreadRunningEV;
+		if(NULL!=(NewThread=CreateThread(NULL,0,BadConnection,Param,0,&tid)))
+		{
+			WaitForSingleObject(ThreadRunningEV,INFINITE);
+			CloseHandle(NewThread);
+		}
+		CloseHandle(ThreadRunningEV);
+			
+		return 1;
+	}
+	return 0;
+}
diff --git a/plugins/YAMN/browser/m_browser.h b/plugins/YAMN/browser/m_browser.h
new file mode 100644
index 0000000000..8b05e3d84a
--- /dev/null
+++ b/plugins/YAMN/browser/m_browser.h
@@ -0,0 +1,42 @@
+#ifndef __MAILBROWSER_H
+#define __MAILBROWSER_H
+
+#include "m_account.h"
+#include "../debug.h"
+
+typedef struct MailBrowserWinParam
+{
+#define YAMN_MAILBROWSERVERSION	1
+	HANDLE ThreadRunningEV;
+	HACCOUNT account;
+	DWORD nflags;			//flags YAMN_ACC_??? when new mails
+	DWORD nnflags;			//flags YAMN_ACC_??? when no new mails
+	void *Param;
+} YAMN_MAILBROWSERPARAM,*PYAMN_MAILBROWSERPARAM;
+
+typedef struct MailShowMsgWinParam
+{
+	HANDLE ThreadRunningEV;
+	HACCOUNT account;
+	HYAMNMAIL mail;
+} YAMN_MAILSHOWPARAM, *PYAMN_MAILSHOWPARAM;
+
+typedef struct NoNewMailParam
+{
+#define YAMN_NONEWMAILVERSION	1
+	HANDLE ThreadRunningEV;
+	HACCOUNT account;
+	DWORD flags;
+	void *Param;
+} YAMN_NONEWMAILPARAM,*PYAMN_NONEWMAILPARAM;
+
+typedef struct BadConnectionParam
+{
+#define YAMN_BADCONNECTIONVERSION	1
+	HANDLE ThreadRunningEV;
+	HACCOUNT account;
+	UINT_PTR errcode;
+	void *Param;
+} YAMN_BADCONNECTIONPARAM,*PYAMN_BADCONNECTIONPARAM;
+
+#endif
diff --git a/plugins/YAMN/browser/mailbrowser.cpp b/plugins/YAMN/browser/mailbrowser.cpp
new file mode 100644
index 0000000000..c6cba1a987
--- /dev/null
+++ b/plugins/YAMN/browser/mailbrowser.cpp
@@ -0,0 +1,2692 @@
+/*
+ * This code implements window handling (new mail)
+ *
+ * (c) majvan 2002-2004
+ */
+/* There can be problems when compiling this file, because in this file
+ * we are using both unicode and no-unicode functions and compiler does not
+ * like it in one file
+ * When you got errors, try to comment the #define <stdio.h> and compile, then
+ * put it back to uncommented and compile again :)
+ */
+#ifndef _WIN32_IE
+	#define _WIN32_IE 0x0400
+#endif
+#ifndef _WIN32_WINNT
+	#define _WIN32_WINNT 0x0501
+#endif
+
+ 
+#include <windows.h>
+#include <stdio.h>
+#include <stddef.h>
+#undef UNICODE
+#include <newpluginapi.h>
+#include <m_utils.h>
+#include <m_skin.h>
+#include <m_langpack.h>
+#include <m_database.h>
+#include <m_clist.h>
+#include <m_popup.h>
+#include "m_kbdnotify.h"
+#include "../main.h"
+#include "m_protoplugin.h"
+#include "m_account.h"
+#include "../debug.h"
+#include "m_messages.h"
+#include "../mails/m_mails.h"
+#include "m_yamn.h"
+#include "../resources/resource.h"
+#include <win2k.h>
+
+#undef UNICODE
+#include "m_browser.h"
+
+#ifndef UNICODE
+	#define UNICODE
+	#define _UNICODE
+	#include <commctrl.h>		//we need to have unicode commctrl.h
+	#include <stdio.h>
+	#undef _UNICODE
+	#undef UNICODE
+#else
+	#include <commctrl.h>
+	#undef _UNICODE
+	#undef UNICODE
+#endif
+
+
+#ifndef SIZEOF
+	#ifdef UNICODE
+		#define SIZEOF(x)		(sizeof(x)/sizeof(WCHAR))
+	#else
+		#define SIZEOF(x)		sizeof(x)
+	#endif
+#endif
+
+#define	TIMER_FLASHING 0x09061979
+#define MAILBROWSER_MINXSIZE	200		//min size of mail browser window
+#define MAILBROWSER_MINYSIZE	130
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+extern char *ProtoName;
+extern HYAMNPROTOPLUGIN POP3Plugin;
+
+extern HANDLE hNewMailHook;
+extern HANDLE WriteToFileEV;
+extern YAMN_VARIABLES YAMNVar;
+extern HICON hYamnIcons[];
+//From synchro.cpp
+extern DWORD WINAPI WaitToWriteFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+extern void WINAPI WriteDoneFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+extern DWORD WINAPI WaitToReadFcn(PSWMRG SObject);
+extern void WINAPI ReadDoneFcn(PSWMRG SObject);
+extern DWORD WINAPI SCIncFcn(PSCOUNTER SCounter);
+extern DWORD WINAPI SCDecFcn(PSCOUNTER SCounter);
+//From mails.cpp
+extern void WINAPI DeleteMessageFromQueueFcn(HYAMNMAIL *From,HYAMNMAIL Which,int mode);
+extern void WINAPI SetRemoveFlagsInQueueFcn(HYAMNMAIL From,DWORD FlagsSet,DWORD FlagsNotSet,DWORD FlagsToSet,int mode);
+//From mime.cpp
+void ExtractHeader(struct CMimeItem *items,int &CP,struct CHeader *head);
+void ExtractShortHeader(struct CMimeItem *items,struct CShortHeader *head); 
+void DeleteHeaderContent(struct CHeader *head);
+void DeleteShortHeaderContent(struct CShortHeader *head);
+char *ExtractFromContentType(char *ContentType,char *value);
+WCHAR *ParseMultipartBody(char *src, char *bond);
+//From account.cpp
+void WINAPI GetStatusFcn(HACCOUNT Which,char *Value);
+//from decode.cpp
+int DecodeQuotedPrintable(char *Src,char *Dst,int DstLen, BOOL isQ);
+int DecodeBase64(char *Src,char *Dst,int DstLen);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+char* s_MonthNames[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
+bool bDate = false,bSub=false,bSize=false,bFrom=false;
+int PosX=0,PosY=0,SizeX=460,SizeY=100;
+int HeadSizeX = 0x2b2, HeadSizeY = 0x0b5, HeadPosX = 100, HeadPosY = 100;
+int HeadSplitPos=250; // per-mils of the size 
+static int FromWidth=250,SubjectWidth=280,SizeWidth=50,SizeDate=205;
+unsigned char optDateTime =  (SHOWDATELONG | SHOWDATENOTODAY);
+
+static WNDPROC OldListViewSubclassProc;
+
+struct CMailNumbersSub
+{
+	int Total;		//any mail
+	int New;			//uses YAMN_MSG_NEW flag
+	int UnSeen;			//uses YAMN_MSG_UNSEEN flag
+//	int Browser;		//uses YAMN_MSG_BROWSER flag
+	int BrowserUC;		//uses YAMN_MSG_BROWSER flag and YAMN_MSG_UNSEEN flag
+	int Display;		//uses YAMN_MSG_DISPLAY flag
+	int DisplayTC;		//uses YAMN_MSG_DISPLAY flag and YAMN_MSG_DISPLAYC flag
+	int DisplayUC;		//uses YAMN_MSG_DISPLAY flag and YAMN_MSG_DISPLAYC flag and YAMN_MSG_UNSEEN flag
+	int PopUp;			//uses YAMN_MSG_POPUP flag
+	int PopUpTC;		//uses YAMN_MSG_POPUPC flag
+	int PopUpNC;		//uses YAMN_MSG_POPUPC flag and YAMN_MSG_NEW flag
+	int PopUpRun;		//uses YAMN_MSG_POPUP flag and YAMN_MSG_NEW flag
+	int PopUpSL2NC;		//uses YAMN_MSG_SPAML2 flag and YAMN_MSG_NEW flag
+	int PopUpSL3NC;		//uses YAMN_MSG_SPAML3 flag and YAMN_MSG_NEW flag
+//	int SysTray;		//uses YAMN_MSG_SYSTRAY flag
+	int SysTrayUC;		//uses YAMN_MSG_SYSTRAY flag and YAMN_MSG_UNSEEN flag
+//	int Sound;		//uses YAMN_MSG_SOUND flag
+	int SoundNC;		//uses YAMN_MSG_SOUND flag and YAMN_MSG_NEW flag
+//	int App;		//uses YAMN_MSG_APP flag
+	int AppNC;		//uses YAMN_MSG_APP flag and YAMN_MSG_NEW flag
+	int EventNC;		//uses YAMN_MSG_NEVENT flag and YAMN_MSG_NEW flag
+};
+
+struct CMailNumbers
+{
+	struct CMailNumbersSub Real;
+	struct CMailNumbersSub Virtual;
+};
+
+struct CMailWinUserInfo
+{
+	HACCOUNT Account;
+	int TrayIconState;
+	BOOL UpdateMailsMessagesAccess;
+	BOOL Seen;
+	BOOL RunFirstTime;
+};
+
+struct CChangeContent
+{
+	DWORD nflags;
+	DWORD nnflags;
+};
+
+struct CUpdateMails
+{
+	struct CChangeContent *Flags;
+	BOOL Waiting;
+	HANDLE Copied;
+};
+struct CSortList
+{
+	HWND hDlg;
+	int	iSubItem;
+};
+
+//Retrieves HACCOUNT, whose mails are displayed in ListMails
+// hLM- handle of dialog window
+// returns handle of account
+inline HACCOUNT GetWindowAccount(HWND hDialog);
+
+//Looks to mail flags and increment mail counter (e.g. if mail is new, increments the new mail counter
+// msgq- mail, which increments the counters
+// MN- counnters structure
+void IncrementMailCounters(HYAMNMAIL msgq,struct CMailNumbers *MN);
+
+enum
+{
+	UPDATE_FAIL=0,		//function failed
+	UPDATE_NONE,		//none update has been performed
+	UPDATE_OK,		//some changes occured, update performed
+};
+//Just looks for mail changes in account and update the mail browser window
+// hDlg- dialog handle
+// ActualAccount- account handle
+// nflags- flags what to do when new mail arrives
+// nnflags- flags what to do when no new mail arrives
+// returns one of UPDATE_XXX value(not implemented yet)
+int UpdateMails(HWND hDlg,HACCOUNT ActualAccount,DWORD nflags,DWORD nnflags);
+
+//When new mail occurs, shows window, plays sound, runs application...
+// hDlg- dialog handle. Dialog of mailbrowser is already created and actions are performed over this window
+// ActualAccount- handle of account, whose mails are to be notified
+// MN- statistics of mails in account
+// nflags- what to do or not to do (e.g. to show mailbrowser window or prohibit to show)
+// nflags- flags what to do when new mail arrives
+// nnflags- flags what to do when no new mail arrives
+void DoMailActions(HWND hDlg,HACCOUNT ActualAccount,struct CMailNumbers *MN,DWORD nflags,DWORD nnflags);
+
+//Looks for items in mailbrowser and if they were deleted, delete them from browser window
+// hListView- handle of listview window
+// ActualAccount- handle of account, whose mails are show
+// MailNumbers- pointer to structure, in which function stores numbers of mails with some property
+// returns one of UPDATE_XXX value (not implemented yet)
+int ChangeExistingMailStatus(HWND hListView,HACCOUNT ActualAccount,struct CMailNumbers *MN);
+
+//Adds new mails to ListView and if any new, shows multi popup (every new message is new popup window created by popup plugin)
+// hListView- handle of listview window
+// ActualAccount- handle of account, whose mails are show
+// NewMailPopUp- pointer to prepared structure for popup plugin, can be NULL if no popup show
+// MailNumbers- pointer to structure, in which function stores numbers of mails with some property
+// nflags- flags what to do when new mail arrives
+// returns one of UPDATE_XXX value (not implemented yet)
+int AddNewMailsToListView(HWND hListView,HACCOUNT ActualAccount,struct CMailNumbers *MailNumbers,DWORD nflags);
+
+//Window callback procedure for popup window (created by popup plugin)
+LRESULT CALLBACK NewMailPopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
+
+//Window callback procedure for popup window (created by popup plugin)
+LRESULT CALLBACK NoNewMailPopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
+
+//Dialog callback procedure for mail browser
+BOOL CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam);
+
+//MailBrowser thread function creates window if needed, tray icon and plays sound
+DWORD WINAPI MailBrowser(LPVOID Param);
+
+LRESULT CALLBACK ListViewSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
+
+//Runs mail browser in new thread
+INT_PTR RunMailBrowserSvc(WPARAM,LPARAM);
+
+#define	YAMN_BROWSER_SHOWPOPUP	0x01
+
+	//	list view items' order criteria
+	#define LVORDER_NOORDER		-1
+	#define LVORDER_STRING		 0
+	#define LVORDER_NUMERIC		 1
+	#define LVORDER_DATETIME	 2
+
+	//	list view order direction
+	#define LVORDER_ASCENDING	 1
+	#define LVORDER_NONE		 0
+	#define LVORDER_DESCENDING	-1
+
+	//	list view sort type
+	#define LVSORTPRIORITY_NONE -1
+
+	//	List view column info.
+	typedef struct _SAMPLELISTVIEWCOLUMN
+	{
+		UINT	 uCXCol;		//	index
+		int		 nSortType;		//	sorting type (STRING = 0, NUMERIC, DATE, DATETIME)
+		int		 nSortOrder;	//	sorting order (ASCENDING = -1, NONE, DESCENDING)
+		int		 nPriority;		//	sort priority (-1 for none, 0, 1, ..., nColumns - 1 maximum)
+		TCHAR lpszName[128];	//	column name
+	} SAMPLELISTVIEWCOLUMN;
+
+	//	Compare priority
+	typedef struct _LVCOMPAREINFO
+	{
+		int	iIdx;				//	Index
+		int iPriority;			//	Priority
+	} LVCOMPAREINFO, *LPLVCOMPAREINFO;
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+LPARAM readItemLParam(HWND hwnd,DWORD iItem)
+{
+	LVITEM item;
+
+	item.mask = LVIF_PARAM;
+	item.iItem = iItem;
+	item.iSubItem = 0;
+	SendMessage(hwnd,LVM_GETITEM,0,(LPARAM)&item);
+	return item.lParam;
+}
+
+inline HACCOUNT GetWindowAccount(HWND hDlg)
+{
+	struct CMailWinUserInfo *mwui;
+
+	if(NULL==(mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER)))
+		return NULL;
+	return mwui->Account;
+}
+
+void IncrementMailCounters(HYAMNMAIL msgq,struct CMailNumbers *MN)
+{
+	if(msgq->Flags & YAMN_MSG_VIRTUAL)
+		MN->Virtual.Total++;
+	else
+		MN->Real.Total++;
+
+	if(msgq->Flags & YAMN_MSG_NEW)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.New++;
+		else
+			MN->Real.New++;
+	if(msgq->Flags & YAMN_MSG_UNSEEN)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.UnSeen++;
+		else
+			MN->Real.UnSeen++;
+	if((msgq->Flags & (YAMN_MSG_UNSEEN | YAMN_MSG_BROWSER)) == (YAMN_MSG_UNSEEN | YAMN_MSG_BROWSER))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.BrowserUC++;
+		else
+			MN->Real.BrowserUC++;
+	if(msgq->Flags & YAMN_MSG_DISPLAY)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.Display++;
+		else
+			MN->Real.Display++;
+	if((msgq->Flags & (YAMN_MSG_DISPLAYC | YAMN_MSG_DISPLAY)) == (YAMN_MSG_DISPLAYC | YAMN_MSG_DISPLAY))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.DisplayTC++;
+		else
+			MN->Real.DisplayTC++;
+	if((msgq->Flags & (YAMN_MSG_UNSEEN | YAMN_MSG_DISPLAYC | YAMN_MSG_DISPLAY)) == (YAMN_MSG_UNSEEN | YAMN_MSG_DISPLAYC | YAMN_MSG_DISPLAY))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.DisplayUC++;
+		else
+			MN->Real.DisplayUC++;
+	if(msgq->Flags & YAMN_MSG_POPUP)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.PopUp++;
+		else
+			MN->Real.PopUp++;
+	if((msgq->Flags & YAMN_MSG_POPUPC) == YAMN_MSG_POPUPC)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.PopUpTC++;
+		else
+			MN->Real.PopUpTC++;
+	if((msgq->Flags & (YAMN_MSG_NEW | YAMN_MSG_POPUPC)) == (YAMN_MSG_NEW | YAMN_MSG_POPUPC))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.PopUpNC++;
+		else
+			MN->Real.PopUpNC++;
+	if((msgq->Flags & (YAMN_MSG_NEW | YAMN_MSG_POPUP)) == (YAMN_MSG_NEW | YAMN_MSG_POPUP))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.PopUpRun++;
+		else
+			MN->Real.PopUpRun++;
+	if((msgq->Flags & YAMN_MSG_NEW) && YAMN_MSG_SPAML(msgq->Flags,YAMN_MSG_SPAML2))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.PopUpSL2NC++;
+		else
+			MN->Real.PopUpSL2NC++;
+	if((msgq->Flags & YAMN_MSG_NEW) && YAMN_MSG_SPAML(msgq->Flags,YAMN_MSG_SPAML3))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.PopUpSL3NC++;
+		else
+			MN->Real.PopUpSL3NC++;
+/*	if(msgq->MailData->Flags & YAMN_MSG_SYSTRAY)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.SysTray++;
+		else
+			MN->Real.SysTray++;
+*/	if((msgq->Flags & (YAMN_MSG_UNSEEN | YAMN_MSG_SYSTRAY)) == (YAMN_MSG_UNSEEN|YAMN_MSG_SYSTRAY))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.SysTrayUC++;
+		else
+			MN->Real.SysTrayUC++;
+/*	if(msgq->MailData->Flags & YAMN_MSG_SOUND)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.Sound++;
+		else
+			MN->Real.Sound++;
+*/	if((msgq->Flags & (YAMN_MSG_NEW|YAMN_MSG_SOUND)) == (YAMN_MSG_NEW|YAMN_MSG_SOUND))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.SoundNC++;
+		else
+			MN->Real.SoundNC++;
+/*	if(msgq->MailData->Flags & YAMN_MSG_APP)
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.App++;
+		else
+			MN->Real.App++;
+*/	if((msgq->Flags & (YAMN_MSG_NEW|YAMN_MSG_APP)) == (YAMN_MSG_NEW|YAMN_MSG_APP))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.AppNC++;
+		else
+			MN->Real.AppNC++;
+	if((msgq->Flags & (YAMN_MSG_NEW|YAMN_MSG_NEVENT)) == (YAMN_MSG_NEW|YAMN_MSG_NEVENT))
+		if(msgq->Flags & YAMN_MSG_VIRTUAL)
+			MN->Virtual.EventNC++;
+		else
+			MN->Real.EventNC++;
+}
+
+int UpdateMails(HWND hDlg,HACCOUNT ActualAccount,DWORD nflags,DWORD nnflags)
+{
+#define MAILBROWSERTITLE "%s - %d new mail messages, %d total"
+
+	struct CMailWinUserInfo *mwui;
+	struct CMailNumbers MN;
+
+	HYAMNMAIL msgq;
+	BOOL Loaded;
+	BOOL RunMailBrowser,RunPopUps;
+
+	mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
+	//now we ensure read access for account and write access for its mails
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:ActualAccountSO-read wait\n");
+	#endif
+	if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"UpdateMails:ActualAccountSO-read wait failed\n");
+		#endif
+		PostMessage(hDlg,WM_DESTROY,(WPARAM)0,(LPARAM)0);
+
+		return UPDATE_FAIL;
+	}
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:ActualAccountSO-read enter\n");
+	#endif
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:ActualAccountMsgsSO-write wait\n");
+	#endif
+	if(WAIT_OBJECT_0!=WaitToWriteFcn(ActualAccount->MessagesAccessSO))
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"UpdateMails:ActualAccountMsgsSO-write wait failed\n");
+		DebugLog(SynchroFile,"UpdateMails:ActualAccountSO-read done\n");
+		#endif
+		ReadDoneFcn(ActualAccount->AccountAccessSO);
+
+		PostMessage(hDlg,WM_DESTROY,(WPARAM)0,(LPARAM)0);
+		return UPDATE_FAIL;
+	}
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:ActualAccountMsgsSO-write enter\n");
+	#endif
+
+	ZeroMemory(&MN,sizeof(MN));
+
+	for(msgq=(HYAMNMAIL)ActualAccount->Mails;msgq!=NULL;msgq=msgq->Next)
+	{
+		if(!LoadedMailData(msgq))				//check if mail is already in memory
+		{
+			Loaded=false;
+			if(NULL==LoadMailData(msgq))			//if we could not load mail to memory, consider this mail deleted and do not display it
+				continue;
+		}
+		else
+			Loaded=true;
+
+		IncrementMailCounters(msgq,&MN);
+
+		if(!Loaded)
+			UnloadMailData(msgq);			//do not keep data for mail in memory
+	}
+
+	if(mwui!=NULL)
+		mwui->UpdateMailsMessagesAccess=TRUE;
+
+	//Now we are going to check if extracting data from mail headers are needed.
+	//If popups will be displayed or mailbrowser window
+	if	((((mwui!=NULL) && !(mwui->RunFirstTime)) &&
+		  (
+		   ((nnflags & YAMN_ACC_MSGP) && !(MN.Real.BrowserUC+MN.Virtual.BrowserUC)) ||
+		   ((nflags & YAMN_ACC_MSGP) && (MN.Real.BrowserUC+MN.Virtual.BrowserUC))
+		  )
+		 ) ||		//if mail window was displayed before and flag YAMN_ACC_MSGP is set
+		 ((nnflags & YAMN_ACC_MSG) && !(MN.Real.BrowserUC+MN.Virtual.BrowserUC)) ||		//if needed to run mailbrowser when no unseen and no unseen mail found
+		 ((nflags & YAMN_ACC_MSG) && (MN.Real.BrowserUC+MN.Virtual.BrowserUC)) ||		//if unseen mails found, we sure run mailbrowser
+		 ((nflags & YAMN_ACC_ICO) && (MN.Real.SysTrayUC+MN.Virtual.SysTrayUC))
+		)			//if needed to run systray
+			RunMailBrowser=TRUE;
+	else	RunMailBrowser=FALSE;
+
+	if( (nflags & YAMN_ACC_POP) && 
+		(ActualAccount->Flags & YAMN_ACC_POPN) &&
+		(MN.Real.PopUpNC+MN.Virtual.PopUpNC) )		//if some popups with mails are needed to show
+			RunPopUps=TRUE;
+	else	RunPopUps=FALSE;
+
+	if(RunMailBrowser)
+		ChangeExistingMailStatus(GetDlgItem(hDlg,IDC_LISTMAILS),ActualAccount,&MN);
+	if(RunMailBrowser || RunPopUps)
+		AddNewMailsToListView(hDlg==NULL ? NULL : GetDlgItem(hDlg,IDC_LISTMAILS),ActualAccount,&MN,nflags);
+
+	if(RunMailBrowser)
+	{
+		WCHAR *TitleStrW;
+		char *TitleStrA;
+		size_t len = strlen(ActualAccount->Name)+strlen(Translate(MAILBROWSERTITLE))+10;	//+10 chars for numbers
+		TitleStrA=new char[len];
+		TitleStrW=new WCHAR[len];
+
+		sprintf(TitleStrA,Translate(MAILBROWSERTITLE),ActualAccount->Name,MN.Real.DisplayUC+MN.Virtual.DisplayUC,MN.Real.Display+MN.Virtual.Display);
+		MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,TitleStrA,-1,TitleStrW,(int)strlen(TitleStrA)+1);
+		SendMessageW(hDlg,WM_SETTEXT,(WPARAM)0,(LPARAM)TitleStrW);
+		delete[] TitleStrA;
+		delete[] TitleStrW;
+	}
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:Do mail actions\n");
+	#endif
+
+	DoMailActions(hDlg,ActualAccount,&MN,nflags,nnflags);
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:Do mail actions done\n");
+	#endif
+	
+	SetRemoveFlagsInQueueFcn((HYAMNMAIL)ActualAccount->Mails,YAMN_MSG_NEW,0,YAMN_MSG_NEW,YAMN_FLAG_REMOVE);				//rempve the new flag
+	if(!RunMailBrowser)
+		SetRemoveFlagsInQueueFcn((HYAMNMAIL)ActualAccount->Mails,YAMN_MSG_UNSEEN,YAMN_MSG_STAYUNSEEN,YAMN_MSG_UNSEEN,YAMN_FLAG_REMOVE);	//remove the unseen flag when it was not displayed and it has not "stay unseen" flag set
+
+	if(mwui!=NULL)
+	{
+		mwui->UpdateMailsMessagesAccess=FALSE;
+		mwui->RunFirstTime=FALSE;
+	}
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UpdateMails:ActualAccountMsgsSO-write done\n");
+	DebugLog(SynchroFile,"UpdateMails:ActualAccountSO-read done\n");
+	#endif
+	WriteDoneFcn(ActualAccount->MessagesAccessSO);
+	ReadDoneFcn(ActualAccount->AccountAccessSO);
+
+	if(RunMailBrowser)
+		UpdateWindow(GetDlgItem(hDlg,IDC_LISTMAILS));
+	else if(hDlg!=NULL)
+		DestroyWindow(hDlg);
+
+	return 1;
+}
+
+int ChangeExistingMailStatus(HWND hListView,HACCOUNT ActualAccount,struct CMailNumbers *MN)
+{
+	int i,in;
+	LVITEMW item;
+	HYAMNMAIL mail,msgq;
+
+	in=ListView_GetItemCount(hListView);
+	item.mask=LVIF_PARAM;
+
+	for(i=0;i<in;i++)
+	{
+		item.iItem=i;
+		item.iSubItem=0;
+		if(TRUE==ListView_GetItem(hListView,&item))
+			mail=(HYAMNMAIL)item.lParam;
+		else
+			continue;
+		for(msgq=(HYAMNMAIL)ActualAccount->Mails;(msgq!=NULL)&&(msgq!=mail);msgq=msgq->Next);	//found the same mail in account queue
+		if(msgq==NULL)		//if mail was not found
+			if(TRUE==ListView_DeleteItem(hListView,i))
+			{
+				in--;i--;
+				continue;
+			}
+	}
+
+	return TRUE;
+}
+
+void MimeDateToLocalizedDateTime(char *datein, WCHAR *dateout, int lendateout);
+int AddNewMailsToListView(HWND hListView,HACCOUNT ActualAccount,struct CMailNumbers *MN,DWORD nflags)
+{
+	HYAMNMAIL msgq;
+	POPUPDATAEX NewMailPopUp = {0};
+
+	WCHAR *FromStr;
+	WCHAR SizeStr[20];
+	WCHAR LocalDateStr[128];
+
+	LVITEMW item;
+	LVFINDINFO fi; 
+
+	int foundi,lfoundi;
+	struct CHeader UnicodeHeader;
+	BOOL Loaded,Extracted,FromStrNew=FALSE;
+
+	ZeroMemory(&item,sizeof(item));
+	ZeroMemory(&UnicodeHeader,sizeof(UnicodeHeader));
+
+	if(hListView!=NULL)
+	{
+		item.mask=LVIF_TEXT | LVIF_PARAM;
+		item.iItem=0;
+		ZeroMemory(&fi,sizeof(fi));
+		fi.flags=LVFI_PARAM;						//let's go search item by lParam number
+		lfoundi=0;
+	}
+
+	NewMailPopUp.lchContact=(ActualAccount->hContact != NULL) ? ActualAccount->hContact : ActualAccount;
+	NewMailPopUp.lchIcon=hYamnIcons[2];
+	NewMailPopUp.colorBack=nflags & YAMN_ACC_POPC ? ActualAccount->NewMailN.PopUpB : GetSysColor(COLOR_BTNFACE);
+	NewMailPopUp.colorText=nflags & YAMN_ACC_POPC ? ActualAccount->NewMailN.PopUpT : GetSysColor(COLOR_WINDOWTEXT);
+	NewMailPopUp.iSeconds=ActualAccount->NewMailN.PopUpTime;
+
+	NewMailPopUp.PluginWindowProc=(WNDPROC)NewMailPopUpProc;
+	NewMailPopUp.PluginData=(void *)0;					//it's new mail popup
+
+	for(msgq=(HYAMNMAIL)ActualAccount->Mails;msgq!=NULL;msgq=msgq->Next,lfoundi++)
+	{
+//		now we hide mail pointer to item's lParam member. We can later use it to retrieve mail datas
+
+		Extracted=FALSE;FromStr=NULL;FromStrNew=FALSE;
+
+		if(hListView!=NULL)
+		{
+			fi.lParam=(LPARAM)msgq;
+			if(-1!=(foundi=ListView_FindItem(hListView,-1,&fi)))	//if mail is already in window
+			{
+				lfoundi=foundi;
+				continue;					//do not insert any item
+			}
+
+			item.iItem=lfoundi;			//insert after last found item
+			item.lParam=(LPARAM)msgq;
+		}
+
+		if(!LoadedMailData(msgq))				//check if mail is already in memory
+		{
+			Loaded=false;
+			if(NULL==LoadMailData(msgq))			//if we could not load mail to memory, consider this mail deleted and do not display it
+				continue;
+		}
+		else
+			Loaded=true;
+
+		if(((hListView!=NULL) && (msgq->Flags & YAMN_MSG_DISPLAY)) ||
+			((nflags & YAMN_ACC_POP) && (ActualAccount->Flags & YAMN_ACC_POPN) && (msgq->Flags & YAMN_MSG_POPUP) && (msgq->Flags & YAMN_MSG_NEW)))
+		{
+
+			if(!Extracted) ExtractHeader(msgq->MailData->TranslatedHeader,msgq->MailData->CP,&UnicodeHeader);
+			Extracted=TRUE;
+
+			if((UnicodeHeader.From!=NULL) && (UnicodeHeader.FromNick!=NULL))
+			{
+				FromStr=new WCHAR[wcslen(UnicodeHeader.From)+wcslen(UnicodeHeader.FromNick)+4];
+				swprintf(FromStr,L"%s <%s>",UnicodeHeader.FromNick,UnicodeHeader.From);
+				FromStrNew=TRUE;
+			}
+			else if(UnicodeHeader.From!=NULL)
+				FromStr=UnicodeHeader.From;
+			else if(UnicodeHeader.FromNick!=NULL)
+				FromStr=UnicodeHeader.FromNick;
+			else if(UnicodeHeader.ReturnPath!=NULL)
+				FromStr=UnicodeHeader.ReturnPath;
+
+			if(NULL==FromStr)
+			{
+				FromStr=L"";
+				FromStrNew=FALSE;
+			}
+		}
+
+
+		if((hListView!=NULL) && (msgq->Flags & YAMN_MSG_DISPLAY))
+		{
+			item.iSubItem=0;
+			item.pszText=FromStr;
+			item.iItem=SendMessageW(hListView,LVM_INSERTITEMW,(WPARAM)0,(LPARAM)&item);
+
+			item.iSubItem=1;
+			item.pszText=(NULL!=UnicodeHeader.Subject ? UnicodeHeader.Subject : (WCHAR*)L"");
+			SendMessageW(hListView,LVM_SETITEMTEXTW,(WPARAM)item.iItem,(LPARAM)&item);
+
+			item.iSubItem=2;
+			swprintf(SizeStr,L"%d kB",msgq->MailData->Size/1024);
+			item.pszText=SizeStr;
+			SendMessageW(hListView,LVM_SETITEMTEXTW,(WPARAM)item.iItem,(LPARAM)&item);
+
+			item.iSubItem=3;
+			item.pszText=L"";
+			{	CMimeItem *heads;
+				for(heads=msgq->MailData->TranslatedHeader;heads!=NULL;heads=heads->Next)	{
+					if (!_stricmp(heads->name,"Date")){ 
+						MimeDateToLocalizedDateTime(heads->value,LocalDateStr,128);
+						item.pszText=LocalDateStr;
+						break;
+			}	}	}
+			SendMessageW(hListView,LVM_SETITEMTEXTW,(WPARAM)item.iItem,(LPARAM)&item);
+		}
+
+		if((nflags & YAMN_ACC_POP) && (ActualAccount->Flags & YAMN_ACC_POPN) && (msgq->Flags & YAMN_MSG_POPUP) && (msgq->Flags & YAMN_MSG_NEW))
+		{
+			WideCharToMultiByte(CP_ACP,0,FromStr,-1,(char *)NewMailPopUp.lpzContactName,sizeof(NewMailPopUp.lpzContactName),NULL,NULL);
+			if(!WideCharToMultiByte(CP_ACP,0,UnicodeHeader.Subject,-1,(char *)NewMailPopUp.lpzText,sizeof(NewMailPopUp.lpzText),NULL,NULL))
+				NewMailPopUp.lpzText[0]=0;
+			PYAMN_MAILSHOWPARAM MailParam = (PYAMN_MAILSHOWPARAM)malloc(sizeof(YAMN_MAILSHOWPARAM));
+			if(MailParam) {
+				MailParam->account = ActualAccount;
+				MailParam->mail = msgq;
+				MailParam->ThreadRunningEV = 0;
+				NewMailPopUp.PluginData=MailParam;
+				CallService(MS_POPUP_ADDPOPUPEX,(WPARAM)&NewMailPopUp,0);
+			}
+		}
+
+		if((msgq->Flags & YAMN_MSG_UNSEEN) && (ActualAccount->NewMailN.Flags & YAMN_ACC_KBN))
+			CallService(MS_KBDNOTIFY_EVENTSOPENED,(WPARAM)1,NULL);
+		
+		if(FromStrNew)
+			delete[] FromStr;
+
+		if(Extracted)
+		{
+			DeleteHeaderContent(&UnicodeHeader);
+			ZeroMemory(&UnicodeHeader,sizeof(UnicodeHeader));
+		}
+
+		if(!Loaded)
+		{
+			SaveMailData(msgq);
+			UnloadMailData(msgq);			//do not keep data for mail in memory
+		}
+	}
+
+	return TRUE;
+}
+
+void DoMailActions(HWND hDlg,HACCOUNT ActualAccount,struct CMailNumbers *MN,DWORD nflags,DWORD nnflags)
+{
+	TCHAR *NotIconText=Translate("- new mail message(s)");
+	NOTIFYICONDATA nid;
+
+	ZeroMemory(&nid,sizeof(nid));
+
+	if(MN->Real.EventNC+MN->Virtual.EventNC)
+		NotifyEventHooks(hNewMailHook,0,0);
+
+	if((nflags & YAMN_ACC_KBN) && (MN->Real.PopUpRun+MN->Virtual.PopUpRun))
+	{
+		CallService(MS_KBDNOTIFY_STARTBLINK,(WPARAM)MN->Real.PopUpNC+MN->Virtual.PopUpNC,NULL);
+	}
+
+	if((nflags & YAMN_ACC_CONT) && (MN->Real.PopUpRun+MN->Virtual.PopUpRun))
+	{
+		char sMsg[250];
+		_snprintf(sMsg,249,Translate("%s : %d new mail message(s), %d total"),ActualAccount->Name,MN->Real.PopUpNC+MN->Virtual.PopUpNC,MN->Real.PopUpTC+MN->Virtual.PopUpTC);
+		if (!(nflags & YAMN_ACC_CONTNOEVENT)){
+			CLISTEVENT cEvent;
+			cEvent.cbSize = sizeof(CLISTEVENT);
+			cEvent.hContact = ActualAccount->hContact;
+			cEvent.hIcon = hYamnIcons[2];
+			cEvent.hDbEvent = (HANDLE)ActualAccount->hContact;
+			cEvent.lParam = (LPARAM) ActualAccount->hContact;
+			cEvent.pszService = MS_YAMN_CLISTDBLCLICK;
+			cEvent.pszTooltip = sMsg;
+			cEvent.flags = 0;
+			CallServiceSync(MS_CLIST_ADDEVENT, 0,(LPARAM)&cEvent);
+		}
+		DBWriteContactSettingString(ActualAccount->hContact, "CList", "StatusMsg", sMsg);
+		
+		if(nflags & YAMN_ACC_CONTNICK)
+		{
+			DBWriteContactSettingString(ActualAccount->hContact, ProtoName, "Nick",sMsg);
+		}
+	}
+
+	if((nflags & YAMN_ACC_POP) && 
+		!(ActualAccount->Flags & YAMN_ACC_POPN) && 
+		(MN->Real.PopUpRun+MN->Virtual.PopUpRun))
+	{
+		POPUPDATAEX NewMailPopUp ={0};
+
+		NewMailPopUp.lchContact=(ActualAccount->hContact != NULL) ? ActualAccount->hContact : ActualAccount;
+		NewMailPopUp.lchIcon=hYamnIcons[2];
+		NewMailPopUp.colorBack=nflags & YAMN_ACC_POPC ? ActualAccount->NewMailN.PopUpB : GetSysColor(COLOR_BTNFACE);
+		NewMailPopUp.colorText=nflags & YAMN_ACC_POPC ? ActualAccount->NewMailN.PopUpT : GetSysColor(COLOR_WINDOWTEXT);
+		NewMailPopUp.iSeconds=ActualAccount->NewMailN.PopUpTime;
+
+		NewMailPopUp.PluginWindowProc=(WNDPROC)NewMailPopUpProc;
+		NewMailPopUp.PluginData=(void *)0;	//multiple popups
+
+		lstrcpyn(NewMailPopUp.lpzContactName,ActualAccount->Name,sizeof(NewMailPopUp.lpzContactName));
+		sprintf(NewMailPopUp.lpzText,Translate("%d new mail message(s), %d total"),MN->Real.PopUpNC+MN->Virtual.PopUpNC,MN->Real.PopUpTC+MN->Virtual.PopUpTC);
+		CallService(MS_POPUP_ADDPOPUPEX,(WPARAM)&NewMailPopUp,0);
+	}
+
+	//destroy tray icon if no new mail
+	if((MN->Real.SysTrayUC+MN->Virtual.SysTrayUC==0) && (hDlg!=NULL))
+	{
+		nid.hWnd=hDlg;
+		nid.uID=0;
+		Shell_NotifyIcon(NIM_DELETE,&nid);
+	}
+
+	//and remove the event
+	if((nflags & YAMN_ACC_CONT) && (!(nflags & YAMN_ACC_CONTNOEVENT)) && (MN->Real.UnSeen + MN->Virtual.UnSeen==0)) {
+		CallService(MS_CLIST_REMOVEEVENT,(WPARAM)ActualAccount->hContact,(LPARAM)ActualAccount->hContact);
+	}
+
+	if((MN->Real.BrowserUC+MN->Virtual.BrowserUC==0) && (hDlg!=NULL))
+	{
+		if(!IsWindowVisible(hDlg) && !(nflags & YAMN_ACC_MSG))
+			PostMessage(hDlg,WM_DESTROY,(WPARAM)0,(LPARAM)0);				//destroy window if no new mail and window is not visible
+		if(nnflags & YAMN_ACC_MSG)											//if no new mail and msg should be executed
+		{
+			SetForegroundWindow(hDlg);
+			ShowWindow(hDlg,SW_SHOWNORMAL);
+		}
+	}
+	else 
+		if(hDlg!=NULL)								//else insert icon and set window if new mails
+		{
+			SendMessageW(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_SCROLL,(WPARAM)0,(LPARAM)0x7ffffff);
+
+			if((nflags & YAMN_ACC_ICO) && (MN->Real.SysTrayUC+MN->Virtual.SysTrayUC))
+			{
+				TCHAR *src,*dest;
+				int i;
+
+				for(src=ActualAccount->Name,dest=nid.szTip,i=0;(*src!=(TCHAR)0) && (i+1<sizeof(nid.szTip));*dest++=*src++);
+				for(src=NotIconText;(*src!=(TCHAR)0) && (i+1<sizeof(nid.szTip));*dest++=*src++);
+				*dest=(TCHAR)0;
+				nid.cbSize=sizeof(NOTIFYICONDATA);
+				nid.hWnd=hDlg;
+				nid.hIcon=hYamnIcons[2];
+				nid.uID=0;
+				nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
+				nid.uCallbackMessage=WM_YAMN_NOTIFYICON;
+				Shell_NotifyIcon(NIM_ADD,&nid);
+				SetTimer(hDlg,TIMER_FLASHING,500,NULL);
+			}
+			if(nflags & YAMN_ACC_MSG)											//if no new mail and msg should be executed
+				ShowWindow(hDlg,SW_SHOWNORMAL);
+		}
+
+	if(MN->Real.AppNC+MN->Virtual.AppNC!=0)
+	{
+		if(nflags & YAMN_ACC_APP)
+		{
+			PROCESS_INFORMATION pi;
+			STARTUPINFOW si;
+			ZeroMemory(&si,sizeof(si));
+			si.cb=sizeof(si);
+
+			if(ActualAccount->NewMailN.App!=NULL)
+			{
+				WCHAR *Command;
+				if(ActualAccount->NewMailN.AppParam!=NULL)
+					Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+wcslen(ActualAccount->NewMailN.AppParam)+6];
+				else
+					Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+6];
+		
+				if(Command!=NULL)
+				{
+					lstrcpyW(Command,L"\"");
+					lstrcatW(Command,ActualAccount->NewMailN.App);
+					lstrcatW(Command,L"\" ");
+					if(ActualAccount->NewMailN.AppParam!=NULL)
+						lstrcatW(Command,ActualAccount->NewMailN.AppParam);
+					CreateProcessW(NULL,Command,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
+					delete[] Command;
+				}
+			}
+		}
+	}
+
+	if(MN->Real.SoundNC+MN->Virtual.SoundNC!=0)
+		if(nflags & YAMN_ACC_SND)
+			CallService(MS_SKIN_PLAYSOUND,0,(LPARAM)YAMN_NEWMAILSOUND);
+
+	if((nnflags & YAMN_ACC_POP) && (MN->Real.PopUpRun+MN->Virtual.PopUpRun==0))
+	{
+		POPUPDATAEX NoNewMailPopUp;
+
+		NoNewMailPopUp.lchContact=(ActualAccount->hContact != NULL) ? ActualAccount->hContact : ActualAccount;
+		NoNewMailPopUp.lchIcon=hYamnIcons[1];
+		NoNewMailPopUp.colorBack=ActualAccount->NoNewMailN.Flags & YAMN_ACC_POPC ? ActualAccount->NoNewMailN.PopUpB : GetSysColor(COLOR_BTNFACE);
+		NoNewMailPopUp.colorText=ActualAccount->NoNewMailN.Flags & YAMN_ACC_POPC ? ActualAccount->NoNewMailN.PopUpT : GetSysColor(COLOR_WINDOWTEXT);
+		NoNewMailPopUp.iSeconds=ActualAccount->NoNewMailN.PopUpTime;
+
+		NoNewMailPopUp.PluginWindowProc=(WNDPROC)NoNewMailPopUpProc;
+		NoNewMailPopUp.PluginData=(void *)0;					//it's not new mail popup
+
+		lstrcpyn(NoNewMailPopUp.lpzContactName,ActualAccount->Name,sizeof(NoNewMailPopUp.lpzContactName));
+		if(MN->Real.PopUpSL2NC+MN->Virtual.PopUpSL2NC)
+			sprintf(NoNewMailPopUp.lpzText,Translate("No new mail message, %d spam(s)"),MN->Real.PopUpSL2NC+MN->Virtual.PopUpSL2NC);
+		else
+			lstrcpyn(NoNewMailPopUp.lpzText,Translate("No new mail message"),sizeof(NoNewMailPopUp.lpzText));
+		CallService(MS_POPUP_ADDPOPUPEX,(WPARAM)&NoNewMailPopUp,0);
+	}
+
+	if((nflags & YAMN_ACC_CONT) && (MN->Real.PopUpRun+MN->Virtual.PopUpRun==0))
+	{
+		if(ActualAccount->hContact != NULL)
+		{
+			if(MN->Real.PopUpTC+MN->Virtual.PopUpTC)
+			{
+				char tmp[255];
+				sprintf(tmp,Translate("%d new mail message(s), %d total"),MN->Real.PopUpNC+MN->Virtual.PopUpNC,MN->Real.PopUpTC+MN->Virtual.PopUpTC);
+				DBWriteContactSettingString(ActualAccount->hContact, "CList", "StatusMsg", tmp);
+			}
+			else
+				DBWriteContactSettingString(ActualAccount->hContact, "CList", "StatusMsg", Translate("No new mail message"));
+
+			if(nflags & YAMN_ACC_CONTNICK)
+			{
+				DBWriteContactSettingString(ActualAccount->hContact, ProtoName, "Nick", ActualAccount->Name);
+			}
+		}
+	}
+	return;
+}
+
+DWORD WINAPI ShowEmailThread(LPVOID Param);
+LRESULT CALLBACK NewMailPopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) 
+{
+	INT_PTR PluginParam=0;
+	switch(msg)
+	{
+		case WM_COMMAND:
+			//if clicked and it's new mail popup window
+			if((HIWORD(wParam)==STN_CLICKED) && (-1!=(PluginParam=CallService(MS_POPUP_GETPLUGINDATA,(WPARAM)hWnd,(LPARAM)&PluginParam))))
+			{
+				HANDLE hContact = 0;
+				HACCOUNT Account;
+				if (PluginParam){
+					PYAMN_MAILSHOWPARAM MailParam = new YAMN_MAILSHOWPARAM;
+					memcpy(MailParam,(PINT_PTR)PluginParam,sizeof(YAMN_MAILSHOWPARAM));
+					hContact = MailParam->account->hContact;
+					Account = MailParam->account;
+					if(NULL!=(MailParam->ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL))){
+						HANDLE NewThread;
+						if(NULL!=(NewThread=CreateThread(NULL,0,ShowEmailThread,(LPVOID)MailParam,0,NULL)))
+						{
+							CloseHandle(NewThread);
+						}
+						CloseHandle(MailParam->ThreadRunningEV);
+					}
+					//delete MailParam;
+				} else {
+					DBVARIANT dbv;
+
+					hContact=(HANDLE)CallService(MS_POPUP_GETCONTACT,(WPARAM)hWnd,(LPARAM)0);
+
+					if(!DBGetContactSetting((HANDLE) hContact,ProtoName,"Id",&dbv)) 
+					{
+						Account=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+						DBFreeVariant(&dbv);
+					}
+					else
+						Account = (HACCOUNT) hContact; //????
+
+
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read wait\n");
+					#endif
+					if(WAIT_OBJECT_0==WaitToReadFcn(Account->AccountAccessSO))
+					{
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read enter\n");
+						#endif
+						switch(msg)
+						{
+							case WM_COMMAND:
+							{
+								YAMN_MAILBROWSERPARAM Param={(HANDLE)0,Account,
+									(Account->NewMailN.Flags & ~YAMN_ACC_POP) | YAMN_ACC_MSGP | YAMN_ACC_MSG,
+									(Account->NoNewMailN.Flags & ~YAMN_ACC_POP) | YAMN_ACC_MSGP | YAMN_ACC_MSG};
+
+								RunMailBrowserSvc((WPARAM)&Param,(LPARAM)YAMN_MAILBROWSERVERSION);
+							}
+							break;
+						}
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read done\n");
+						#endif
+						ReadDoneFcn(Account->AccountAccessSO);
+					}
+					#ifdef DEBUG_SYNCHRO
+					else
+						DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read enter failed\n");
+					#endif
+				}
+				if ((Account->NewMailN.Flags & YAMN_ACC_CONT) && !(Account->NewMailN.Flags & YAMN_ACC_CONTNOEVENT)){
+					CallService(MS_CLIST_REMOVEEVENT,(WPARAM)hContact,(LPARAM)hContact);
+				}
+			}
+			// fall through
+		case WM_CONTEXTMENU:
+			SendMessageW(hWnd,UM_DESTROYPOPUP,0,0);
+			break;			
+		case UM_FREEPLUGINDATA:{
+				PYAMN_MAILSHOWPARAM mpd = (PYAMN_MAILSHOWPARAM)PUGetPluginData(hWnd);
+				HANDLE hContact = 0;
+				if ((mpd) && (INT_PTR)mpd!=-1)free(mpd);
+				return FALSE;
+			}
+		case UM_INITPOPUP:
+			//This is the equivalent to WM_INITDIALOG you'd get if you were the maker of dialog popups.
+			WindowList_Add(YAMNVar.MessageWnds,hWnd,NULL);
+			break;
+		case UM_DESTROYPOPUP:
+			WindowList_Remove(YAMNVar.MessageWnds,hWnd);
+			break;
+		case WM_YAMN_STOPACCOUNT:
+		{
+			HACCOUNT ActualAccount;
+			HANDLE hContact;
+			DBVARIANT dbv;
+
+			hContact=(HANDLE)CallService(MS_POPUP_GETCONTACT,(WPARAM)hWnd,(LPARAM)0);
+
+			if(!DBGetContactSetting((HANDLE) hContact,ProtoName,"Id",&dbv)) 
+			{
+				ActualAccount=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+				DBFreeVariant(&dbv);
+			}
+			else
+				ActualAccount = (HACCOUNT) hContact;
+
+			if((HACCOUNT)wParam!=ActualAccount)
+				break;
+			DestroyWindow(hWnd);
+			return 0;
+		}
+		case WM_NOTIFY:
+		default:
+			break;
+	}
+	return DefWindowProc(hWnd,msg,wParam,lParam);
+}
+
+LRESULT CALLBACK NoNewMailPopUpProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) 
+{
+	switch(msg)
+	{
+		case WM_COMMAND:
+			if((HIWORD(wParam)==STN_CLICKED) && (msg==WM_COMMAND))
+			{
+				HACCOUNT ActualAccount;
+				HANDLE hContact;
+				DBVARIANT dbv;
+
+				hContact=(HANDLE)CallService(MS_POPUP_GETCONTACT,(WPARAM)hWnd,(LPARAM)0);
+
+				if(!DBGetContactSetting((HANDLE) hContact,ProtoName,"Id",&dbv)) 
+				{
+					ActualAccount=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+					DBFreeVariant(&dbv);
+				}
+				else
+					ActualAccount = (HACCOUNT) hContact;
+
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read wait\n");
+				#endif
+				if(WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
+				{
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read enter\n");
+					#endif
+					switch(msg)
+					{
+						case WM_COMMAND:
+						{
+							YAMN_MAILBROWSERPARAM Param={(HANDLE)0,ActualAccount,ActualAccount->NewMailN.Flags,ActualAccount->NoNewMailN.Flags,0};
+
+							Param.nnflags=Param.nnflags | YAMN_ACC_MSG;			//show mails in account even no new mail in account
+							Param.nnflags=Param.nnflags & ~YAMN_ACC_POP;
+							
+							Param.nflags=Param.nflags | YAMN_ACC_MSG;			//show mails in account even no new mail in account
+							Param.nflags=Param.nflags & ~YAMN_ACC_POP;
+
+							RunMailBrowserSvc((WPARAM)&Param,(LPARAM)YAMN_MAILBROWSERVERSION);
+						}
+						break;
+					}
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read done\n");
+					#endif
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+				}
+				#ifdef DEBUG_SYNCHRO
+				else
+					DebugLog(SynchroFile,"PopUpProc:LEFTCLICK:ActualAccountSO-read enter failed\n");
+				#endif
+				SendMessageW(hWnd,UM_DESTROYPOPUP,0,0);
+			}
+			break;
+	
+		case WM_CONTEXTMENU:
+			SendMessageW(hWnd,UM_DESTROYPOPUP,0,0);
+			break;
+
+		case UM_FREEPLUGINDATA:
+			//Here we'd free our own data, if we had it.
+			return FALSE;
+		case UM_INITPOPUP:
+			//This is the equivalent to WM_INITDIALOG you'd get if you were the maker of dialog popups.
+			WindowList_Add(YAMNVar.MessageWnds,hWnd,NULL);
+			break;
+		case UM_DESTROYPOPUP:
+			WindowList_Remove(YAMNVar.MessageWnds,hWnd);
+			break;
+		case WM_YAMN_STOPACCOUNT:
+		{
+			HACCOUNT ActualAccount;
+			HANDLE hContact;
+			DBVARIANT dbv;
+
+			hContact=(HANDLE)CallService(MS_POPUP_GETCONTACT,(WPARAM)hWnd,(LPARAM)0);
+
+			if(!DBGetContactSetting((HANDLE) hContact,ProtoName,"Id",&dbv)) 
+			{
+				ActualAccount=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+				DBFreeVariant(&dbv);
+			}
+			else
+				ActualAccount = (HACCOUNT) hContact;
+
+			if((HACCOUNT)wParam!=ActualAccount)
+				break;
+
+			DestroyWindow(hWnd);
+			return 0;
+		}
+		case WM_NOTIFY:
+/*			switch(((LPNMHDR)lParam)->code)
+			{
+				case NM_CLICK:
+				{
+				}
+			}
+			break;
+*/		default:
+			break;
+	}
+	return DefWindowProc(hWnd,msg,wParam,lParam);
+}
+
+#ifdef __GNUC__
+//number of 100 ns periods between FILETIME 0 (1601/01/01 00:00:00.0000000) and TIMESTAMP 0 (1970/01/01 00:00:00)
+#define NUM100NANOSEC  116444736000000000ULL
+//The biggest time Get[Date|Time]Format can handle (Fri, 31 Dec 30827 23:59:59.9999999)
+#define MAXFILETIME 0x7FFF35F4F06C7FFFULL
+#else
+#define NUM100NANOSEC  116444736000000000
+#define MAXFILETIME 0x7FFF35F4F06C7FFF
+#endif
+ULONGLONG MimeDateToFileTime(char *datein){
+	char *day=0, *month=0, *year=0, *time=0, *shift=0;
+	SYSTEMTIME st;
+	ULONGLONG res=0;
+	int wShiftSeconds = CallService(MS_DB_TIME_TIMESTAMPTOLOCAL,0,0);
+	GetLocalTime(&st);
+	//datein = "Xxx, 1 Jan 2060 5:29:1 +0530 XXX";
+	//datein = "Xxx,  1 Jan 2060 05:29:10 ";
+	//datein = "      ManySpaces  1.5   Jan 2060 05::";
+	//datein = "Xxx,  35 February 20 :29:10 ";
+	//datein = "01.12.2007 (22:38:17)"; //
+	if (datein){
+		char tmp [64];
+		while (  datein[0]==' ')  datein++; // eat leading spaces
+		strncpy(tmp,datein,63); tmp [63]=0;
+		if (atoi(tmp)) { // Parseable integer on DayOfWeek field? Buggy mime date.
+			day = tmp;
+		} else {
+			int i = 0;
+			while (tmp[i]==' ')i++; if (day = strchr(&tmp[i],' ')){day[0]=0; day++;}
+		}
+		if (day)   {while (  day[0]==' ')  day++;if (month= strchr(day,  ' ')){month[0]=0; month++;}}
+		if (month) {while (month[0]==' ')month++;if (year = strchr(month,' ')){ year[0]=0; year++;}}
+		if (year)  {while ( year[0]==' ') year++;if (time = strchr(year, ' ')){ time[0]=0; time++;}}
+		if (time)  {while ( time[0]==' ') time++;if (shift= strchr(time, ' ')){shift[0]=0; shift++;shift[5]=0;}}
+
+		if (year){
+			st.wYear = atoi(year);
+			if (strlen(year)<4)	if (st.wYear<70)st.wYear += 2000; else st.wYear += 1900;
+		};
+		if (month) for(int i=0;i<12;i++) if(strncmp(month,s_MonthNames[i],3)==0) {st.wMonth = i + 1; break;}
+		if (day) st.wDay = atoi(day);
+		if (time) {
+			char *h, *m, *s;
+			h = time;
+			if (m = strchr(h,':')){
+				m[0]=0; m++;
+				if (s = strchr(m,':')){s[0] = 0; s++;}
+			} else s=0;
+			st.wHour = atoi(h);
+			st.wMinute = m?atoi(m):0;
+			st.wSecond = s?atoi(s):0;
+		} else {st.wHour=st.wMinute=st.wSecond=0;}
+
+		if (shift){
+			if (strlen(shift)<4) {
+				//has only hour
+				wShiftSeconds = (atoi(shift))*3600;
+			} else {
+				char *smin = shift + strlen(shift)-2;
+				int ismin = atoi(smin);
+				smin[0] = 0;
+				int ishour = atoi(shift);
+				wShiftSeconds = (ishour*60+(ishour<0?-1:1)*ismin)*60;
+			}
+		}
+	} // if (datein)
+	FILETIME ft;
+	if (SystemTimeToFileTime(&st,&ft)){
+		res = ((ULONGLONG)ft.dwHighDateTime<<32)|((ULONGLONG)ft.dwLowDateTime);
+		LONGLONG w100nano = Int32x32To64((DWORD)wShiftSeconds,10000000);
+		res -=  w100nano;
+	}else{
+		res=0;
+	}
+	return res;
+}
+void FileTimeToLocalizedDateTime(LONGLONG filetime, WCHAR *dateout, int lendateout){
+	int localeID = CallService(MS_LANGPACK_GETLOCALE,0,0);
+	//int localeID = MAKELCID(LANG_URDU, SORT_DEFAULT);
+	if (localeID==CALLSERVICE_NOTFOUND) localeID=LOCALE_USER_DEFAULT;
+	if (filetime>MAXFILETIME) filetime = MAXFILETIME;
+	else if (filetime<=0) {
+		wcsncpy(dateout,TranslateW(L"Invalid"),lendateout);
+		return;
+	}
+	SYSTEMTIME st;
+	WORD wTodayYear, wTodayMonth, wTodayDay;
+	FILETIME ft;
+	BOOL willShowDate = !(optDateTime&SHOWDATENOTODAY);
+	if (!willShowDate){
+		GetLocalTime(&st);
+		wTodayYear = st.wYear;
+		wTodayMonth = st.wMonth;
+		wTodayDay = st.wDay;
+	}
+	ft.dwLowDateTime = (DWORD)filetime;
+	ft.dwHighDateTime = (DWORD)(filetime >> 32);
+	FILETIME localft;
+	if (!FileTimeToLocalFileTime(&ft,&localft)){
+			// this should never happen
+			wcsncpy(dateout,L"Incorrect FileTime",lendateout);
+	} else {
+		if (!FileTimeToSystemTime(&localft,&st)){
+			// this should never happen
+			wcsncpy(dateout,L"Incorrect LocalFileTime",lendateout);
+		} else {
+			dateout[lendateout-1]=0;
+			int templen = 0;
+			if (!willShowDate) willShowDate = (wTodayYear!=st.wYear)||(wTodayMonth!=st.wMonth)||(wTodayDay!=st.wDay);
+			if (willShowDate){
+				templen = GetDateFormatW(localeID,(optDateTime&SHOWDATELONG)?DATE_LONGDATE:DATE_SHORTDATE,&st,NULL,dateout,lendateout-2);
+				dateout[templen-1] = ' ';
+			}
+			if (templen<(lendateout-1)){
+				GetTimeFormatW(localeID,(optDateTime&SHOWDATENOSECONDS)?TIME_NOSECONDS:0,&st,NULL,&dateout[templen],lendateout-templen-1);
+			}
+		}
+	}
+}
+void MimeDateToLocalizedDateTime(char *datein, WCHAR *dateout, int lendateout){
+	ULONGLONG ft = MimeDateToFileTime(datein);
+	FileTimeToLocalizedDateTime(ft,dateout,lendateout);
+}
+
+int CALLBACK ListViewCompareProc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSort ) {
+	if(lParam1 == NULL || lParam2 == NULL)
+		return 0;
+
+	int					nResult	= 0;
+	char				*str1;
+	char				*str2;
+	HYAMNMAIL			email1	= (HYAMNMAIL)lParam1;
+	HYAMNMAIL			email2	= (HYAMNMAIL)lParam2;
+	struct CShortHeader	Header1;
+	struct CShortHeader	Header2;
+	ZeroMemory(&Header1,sizeof(Header1));
+	ZeroMemory(&Header2,sizeof(Header2));
+
+	try {
+		ExtractShortHeader(email1->MailData->TranslatedHeader,&Header1);
+		ExtractShortHeader(email2->MailData->TranslatedHeader,&Header2);
+
+		switch((int)lParamSort)
+		{
+			case 0:	//From
+				if(Header1.FromNick == NULL)
+					 str1 = Header1.From;
+				else str1 = Header1.FromNick;
+
+				if(Header2.FromNick == NULL)
+					 str2 = Header2.From;
+				else str2 = Header2.FromNick;
+
+				nResult = strcmp(str1, str2);
+
+				if(bFrom) nResult = -nResult;
+				break;
+			case 1:	//Subject
+				if(Header1.Subject == NULL)
+					 str1 = " ";
+				else str1 = Header1.Subject;
+
+				if(Header2.Subject == NULL)
+					 str2 = " ";
+				else str2 = Header2.Subject;
+
+				nResult = strcmp(str1, str2);
+
+				if(bSub) nResult = -nResult;
+				break;
+			case 2:	//Size
+				if(email1->MailData->Size == email2->MailData->Size)	nResult =  0;
+				if(email1->MailData->Size >  email2->MailData->Size)	nResult =  1;
+				if(email1->MailData->Size <  email2->MailData->Size)	nResult = -1;
+
+				if(bSize) nResult = -nResult;
+				break;
+
+			case 3:	//Date
+				{
+				ULONGLONG ts1 = 0, ts2 = 0;
+				ts1 = MimeDateToFileTime(Header1.Date);
+				ts2 = MimeDateToFileTime(Header2.Date);
+				if(ts1 > ts2) nResult = 1;
+				else if (ts1 < ts2) nResult = -1;
+				else nResult = 0;
+				}
+				if(bDate) nResult = -nResult;
+				break;
+
+			default:
+				if(Header1.Subject == NULL) str1 = " ";
+				else str1 = Header1.Subject;
+
+				if(Header2.Subject == NULL) str2 = " ";
+				else str2 = Header2.Subject;
+
+				nResult = strcmp(str1, str2);
+				break;
+		}
+		//MessageBox(NULL,str1,str2,0);
+	}
+	catch( ... )
+	{
+	}
+
+	//free mem
+	DeleteShortHeaderContent(&Header1);
+	DeleteShortHeaderContent(&Header2);
+	return nResult;
+
+} 
+
+HCURSOR hCurSplitNS, hCurSplitWE;
+static WNDPROC OldSplitterProc;
+#define DM_SPLITTERMOVED     (WM_USER+15)
+static LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+	switch (msg) {
+		case WM_NCHITTEST:
+		  return HTCLIENT;
+		case WM_SETCURSOR:
+		{
+				SetCursor(hCurSplitNS);
+				return TRUE;
+		}
+		case WM_LBUTTONDOWN:
+			SetCapture(hwnd);
+			return 0;
+		case WM_MOUSEMOVE:
+			if (GetCapture() == hwnd) {
+				RECT rc;
+				GetClientRect(hwnd, &rc);
+				SendMessage(GetParent(hwnd), DM_SPLITTERMOVED, (short) HIWORD(GetMessagePos()) + rc.bottom / 2, (LPARAM) hwnd);
+			}
+			return 0;
+		case WM_LBUTTONUP:
+			ReleaseCapture();
+			return 0;
+	}
+	return CallWindowProc(OldSplitterProc, hwnd, msg, wParam, lParam);
+}
+
+
+void ConvertCodedStringToUnicode(char *stream,WCHAR **storeto,DWORD cp,int mode);
+int ConvertStringToUnicode(char *stream,unsigned int cp,WCHAR **out);
+INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+		{
+//			HIMAGELIST hIcons;
+			PYAMN_MAILSHOWPARAM MailParam = (PYAMN_MAILSHOWPARAM)lParam;
+			WCHAR *iHeaderW=NULL;
+			WCHAR *iValueW=NULL;
+			int StrLen;
+			HWND hListView = GetDlgItem(hDlg,IDC_LISTHEADERS);
+			OldSplitterProc = (WNDPROC) SetWindowLongPtr(GetDlgItem(hDlg, IDC_SPLITTER), GWLP_WNDPROC, (LONG_PTR) SplitterSubclassProc);
+			SetWindowLongPtr(hDlg,DWLP_USER,(LONG_PTR)MailParam);
+			SendMessageW(hDlg,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)hYamnIcons[2]);
+			SendMessageW(hDlg,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)hYamnIcons[2]);
+
+			ListView_SetUnicodeFormat(hListView,TRUE);
+			ListView_SetExtendedListViewStyle(hListView,LVS_EX_FULLROWSELECT);
+
+			StrLen=MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,Translate("Header"),-1,NULL,0);
+			iHeaderW=new WCHAR[StrLen+1];
+			MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,Translate("Header"),-1,iHeaderW,StrLen);
+
+			StrLen=MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,Translate("Value"),-1,NULL,0);
+			iValueW=new WCHAR[StrLen+1];
+			MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,Translate("Value"),-1,iValueW,StrLen);
+
+			LVCOLUMNW lvc0={LVCF_FMT | LVCF_TEXT | LVCF_WIDTH,LVCFMT_LEFT,130,iHeaderW,0,0};
+			LVCOLUMNW lvc1={LVCF_FMT | LVCF_TEXT | LVCF_WIDTH,LVCFMT_LEFT,400,iValueW,0,0};
+			SendMessageW(hListView,LVM_INSERTCOLUMNW,(WPARAM)0,(LPARAM)&lvc0);
+			SendMessageW(hListView,LVM_INSERTCOLUMNW,(WPARAM)1,(LPARAM)&lvc1);
+			if(NULL!=iHeaderW)
+				delete[] iHeaderW;
+			if(NULL!=iValueW)
+				delete[] iValueW;
+
+			//WindowList_Add(YAMNVar.MessageWnds,hDlg,NULL);
+			//WindowList_Add(YAMNVar.NewMailAccountWnd,hDlg,ActualAccount);
+			SendMessage(hDlg,WM_YAMN_CHANGECONTENT,0,(LPARAM)MailParam);
+			MoveWindow(hDlg,HeadPosX,HeadPosY,HeadSizeX,HeadSizeY,0);
+			ShowWindow(hDlg,SW_SHOWNORMAL);
+			break;
+		}
+		case WM_YAMN_CHANGECONTENT:
+			{
+			PYAMN_MAILSHOWPARAM MailParam  = (PYAMN_MAILSHOWPARAM)
+				(lParam?lParam:GetWindowLongPtr(hDlg,DWLP_USER));
+			HWND hListView = GetDlgItem(hDlg,IDC_LISTHEADERS);
+			HWND hEdit = GetDlgItem(hDlg,IDC_EDITBODY);
+			//do not redraw
+			SendMessage(hListView, WM_SETREDRAW, 0, 0);
+			ListView_DeleteAllItems(hListView);
+			struct CMimeItem *Header;
+			LVITEM item;
+			item.mask=LVIF_TEXT | LVIF_PARAM;
+			WCHAR *From=0,*Subj=0;
+			char *contentType=0, *transEncoding=0, *body=0; //should not be delete[]-ed
+			for(Header=MailParam->mail->MailData->TranslatedHeader;Header!=NULL;Header=Header->Next)
+			{
+				WCHAR *str1 = 0;
+				WCHAR *str2 = 0;
+				if (!body) if (!_stricmp(Header->name,"Body")) {body = Header->value; continue;}
+				if (!contentType) if (!_stricmp(Header->name,"Content-Type")) contentType = Header->value;
+				if (!transEncoding) if (!_stricmp(Header->name,"Content-Transfer-Encoding")) transEncoding = Header->value;
+				//ConvertCodedStringToUnicode(Header->name,&str1,MailParam->mail->MailData->CP,1); 
+				{
+					int streamsize = MultiByteToWideChar(20127,0,Header->name,-1,NULL,0);
+					str1 = new WCHAR[streamsize+1];
+					MultiByteToWideChar(20127,0,Header->name,-1,str1,streamsize);//US-ASCII
+				}
+				ConvertCodedStringToUnicode(Header->value,&str2,MailParam->mail->MailData->CP,1);
+				if (!str2) { str2 = (WCHAR *)malloc(2); str2[0] = 0; }// the header value may be NULL
+				if (!From) if (!_stricmp(Header->name,"From")) {
+					From =new WCHAR[wcslen(str2)+1];
+					wcscpy(From,str2);
+				}
+				if (!Subj) if (!_stricmp(Header->name,"Subject")) {
+					Subj =new WCHAR[wcslen(str2)+1];
+					wcscpy(Subj,str2);
+				}
+				//if (!hasBody) if (!strcmp(Header->name,"Body")) hasBody = true;
+				int count = 0; WCHAR **split=0;
+				if (str2){
+					int ofs = 0;
+					while (str2[ofs]) {
+						if ((str2[ofs]==0x266A)||(str2[ofs]==0x25D9)||(str2[ofs]==0x25CB)||
+							(str2[ofs]==0x09)||(str2[ofs]==0x0A)||(str2[ofs]==0x0D))count++;
+						ofs++;
+					}
+					split=new WCHAR*[count+1];
+					count=0; ofs=0;
+					split[0]=str2;
+					while (str2[ofs]){
+						if ((str2[ofs]==0x266A)||(str2[ofs]==0x25D9)||(str2[ofs]==0x25CB)||
+							(str2[ofs]==0x09)||(str2[ofs]==0x0A)||(str2[ofs]==0x0D)) {
+							if (str2[ofs-1]){
+								count++;
+							}
+							split[count]=(WCHAR *)(str2+ofs+1);
+							str2[ofs]=0;
+						}
+						ofs++;
+					};
+				}
+				if (!_stricmp(Header->name,"From")||!_stricmp(Header->name,"To")||!_stricmp(Header->name,"Date")||!_stricmp(Header->name,"Subject")) 
+					item.iItem = 0;
+				else 
+					item.iItem = 999;
+				for (int i=0;i<=count;i++){
+					item.iSubItem=0;
+					if (i==0){
+						item.pszText=str1;
+					} else {
+						item.iItem++;
+						item.pszText=0;
+					}
+					item.iItem=SendMessageW(hListView,LVM_INSERTITEMW,(WPARAM)0,(LPARAM)&item);
+					item.iSubItem=1;
+					item.pszText=str2?split[i]:0;
+					SendMessageW(hListView,LVM_SETITEMTEXTW,(WPARAM)item.iItem,(LPARAM)&item);
+				} 
+				if (split)delete[] split;
+
+				if (str1) free(str1);
+				if (str2) free(str2);
+			}
+			if (body){
+				WCHAR *bodyDecoded = 0;
+				char *localBody=0;
+				if (contentType) {
+					if (!_strnicmp(contentType,"text",4)) {
+						if (transEncoding){
+							if (!_stricmp(transEncoding,"base64")){
+								int size = (int)strlen(body)*3/4+5;
+								localBody = new char[size+1];
+								DecodeBase64(body,localBody,size); 
+							} else if (!_stricmp(transEncoding,"quoted-printable")){
+								int size = (int)strlen(body)+2;
+								localBody = new char[size+1];
+								DecodeQuotedPrintable(body,localBody,size,FALSE); 
+							}
+						}
+					} else if (!_strnicmp(contentType,"multipart/",10)) {
+						char *bondary=NULL;
+						if(NULL!=(bondary=ExtractFromContentType(contentType,"boundary=")))
+						{
+							bodyDecoded = ParseMultipartBody(body,bondary);
+							delete[] bondary;
+						}
+					}
+				}
+				if (!bodyDecoded)ConvertStringToUnicode(localBody?localBody:body,MailParam->mail->MailData->CP,&bodyDecoded);
+				SendMessageW(hEdit,WM_SETTEXT,(WPARAM)0,(LPARAM)bodyDecoded);
+				delete[] bodyDecoded;
+				if (localBody) delete[] localBody;
+				SetFocus(hEdit);
+			}
+			if (!(MailParam->mail->Flags & YAMN_MSG_BODYRECEIVED)) {
+				MailParam->mail->Flags |= YAMN_MSG_BODYREQUESTED;
+				CallService(MS_YAMN_ACCOUNTCHECK,(WPARAM)MailParam->account,0);
+			} else {
+				if (MailParam->mail->Flags & YAMN_MSG_UNSEEN){
+					MailParam->mail->Flags&=~YAMN_MSG_UNSEEN; //mark the message as seen
+					HWND hMailBrowser;
+					if (hMailBrowser=WindowList_Find(YAMNVar.NewMailAccountWnd,MailParam->account)){
+						struct CChangeContent Params={MailParam->account->NewMailN.Flags|YAMN_ACC_MSGP,MailParam->account->NoNewMailN.Flags|YAMN_ACC_MSGP};	
+						SendMessageW(hMailBrowser,WM_YAMN_CHANGECONTENT,(WPARAM)MailParam->account,(LPARAM)&Params);
+					} else {
+						UpdateMails(NULL,MailParam->account,MailParam->account->NewMailN.Flags,MailParam->account->NoNewMailN.Flags);
+					}
+				}
+			}
+			ShowWindow(GetDlgItem(hDlg, IDC_SPLITTER),(MailParam->mail->Flags & YAMN_MSG_BODYRECEIVED)?SW_SHOW:SW_HIDE);
+			ShowWindow(hEdit,(MailParam->mail->Flags & YAMN_MSG_BODYRECEIVED)?SW_SHOW:SW_HIDE);
+			WCHAR *title=0;
+			title = new WCHAR[(From?wcslen(From):0)+(Subj?wcslen(Subj):0)+4];
+			if (From&&Subj) wsprintfW(title,L"%s (%s)",Subj,From);
+			else if (From)wsprintfW(title,L"%s",From);
+			else if (Subj)wsprintfW(title,L"%s",Subj);
+			else wsprintfW(title,L"none");
+			if (Subj) delete[] Subj;
+			if (From) delete[] From;
+			SendMessageW(hDlg,WM_SETTEXT,(WPARAM)0,(LPARAM)title);
+			delete[] title;
+			// turn on redrawing
+			SendMessage(hListView, WM_SETREDRAW, 1, 0);
+			SendMessage(hDlg, WM_SIZE, 0, HeadSizeY<<16|HeadSizeX);
+			} break;
+		case WM_YAMN_STOPACCOUNT:
+		{
+			PYAMN_MAILSHOWPARAM MailParam  = (PYAMN_MAILSHOWPARAM)
+				(lParam?lParam:GetWindowLongPtr(hDlg,DWLP_USER));
+
+			if(NULL==MailParam)
+				break;
+			if((HACCOUNT)wParam!=MailParam->account)
+				break;
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"ShowMessage:STOPACCOUNT:sending destroy msg\n");
+			#endif
+			DestroyWindow(hDlg);
+		}
+			return 1;
+		case WM_CTLCOLORSTATIC: 
+			//here should be check if this is our edittext control. 
+			//but we have only one static control (for now);
+			SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
+			SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT));
+			return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);;
+		case WM_DESTROY:
+		{
+			RECT coord;
+			if(GetWindowRect(hDlg,&coord))
+			{
+				HeadPosX=coord.left;
+				HeadSizeX=coord.right-coord.left;
+				HeadPosY=coord.top;
+				HeadSizeY=coord.bottom-coord.top;
+			}
+
+			//if(!YAMNVar.Shutdown && GetWindowRect(hDlg,&coord))	//the YAMNVar.Shutdown testing is because M<iranda strange functionality at shutdown phase, when call to DBWriteContactSetting freezes calling thread
+			//{
+			//	//HeadPosX=coord.left;
+			//	//HeadSizeX=coord.right-coord.left;
+			//	//HeadPosY=coord.top;
+			//	//HeadSizeY=coord.bottom-coord.top;
+			//	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSX,HeadPosX);
+			//	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSY,HeadPosY);
+			//	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGSIZEX,HeadSizeX);
+			//	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGSIZEY,HeadSizeY);
+			//	DBWriteContactSettingWord(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSSPLIT,HeadSplitPos);
+			//}
+			//PYAMN_MAILSHOWPARAM MailParam  = (PYAMN_MAILSHOWPARAM)(GetWindowLongPtr(hDlg,DWLP_USER));
+			//MailParam->mail->MsgWindow = NULL;
+			PostQuitMessage(1);
+		}
+		break;
+		case WM_SYSCOMMAND:
+		{
+			switch(wParam)
+			{
+				case SC_CLOSE:
+					DestroyWindow(hDlg);
+					break;
+			}
+		}
+		break;
+		case WM_MOVE:
+				HeadPosX=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
+				HeadPosY=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
+				return 0;
+		case DM_SPLITTERMOVED:
+			{
+				if ((HWND) lParam == GetDlgItem(hDlg, IDC_SPLITTER)) {
+					POINT pt;
+					pt.x = 0;
+					pt.y = wParam;
+					ScreenToClient(hDlg, &pt);
+					HeadSplitPos = (pt.y*1000)/HeadSizeY;//+rc.bottom-rc.top;
+					if (HeadSplitPos>=1000) HeadSplitPos = 999;
+					else if (HeadSplitPos<=0) HeadSplitPos = 1;
+					else SendMessage(hDlg, WM_SIZE, 0, HeadSizeY<<16|HeadSizeX);
+				}
+				return 0;
+			}
+		case WM_SIZE:
+			if(wParam==SIZE_RESTORED)
+			{
+				HWND hList = GetDlgItem(hDlg,IDC_LISTHEADERS);
+				HWND hEdit = GetDlgItem(hDlg,IDC_EDITBODY);
+				BOOL changeX = LOWORD(lParam)!=HeadSizeX;
+				BOOL isBodyShown = ((PYAMN_MAILSHOWPARAM)(GetWindowLongPtr(hDlg,DWLP_USER)))->mail->Flags & YAMN_MSG_BODYRECEIVED;
+				HeadSizeX=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
+				HeadSizeY=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
+				int localSplitPos = (HeadSplitPos*HeadSizeY)/1000;
+				int localSizeX;
+				RECT coord;
+				MoveWindow(GetDlgItem(hDlg,IDC_SPLITTER),5,localSplitPos,HeadSizeX-10,2,TRUE);
+				MoveWindow(hEdit,5,localSplitPos+6,HeadSizeX-10,HeadSizeY-localSplitPos-11,TRUE);	//where to put text window while resizing
+				MoveWindow(hList,  5         ,5     ,HeadSizeX-10    ,(isBodyShown?localSplitPos:HeadSizeY)-10,TRUE);	//where to put headers list window while resizing
+				//if (changeX){
+					if (GetClientRect(hList,&coord)){
+						localSizeX=coord.right-coord.left;
+					} else localSizeX=HeadSizeX;
+					LONG iNameWidth =  ListView_GetColumnWidth(hList,0);
+					ListView_SetColumnWidth(hList,1,(localSizeX<=iNameWidth)?0:(localSizeX-iNameWidth));
+				//}
+			}
+//			break;
+			return 0;
+		case WM_CONTEXTMENU:
+			{
+				if ( GetWindowLongPtr(( HWND )wParam, GWLP_ID ) == IDC_LISTHEADERS)	{
+					//MessageBox(0,"LISTHEADERS","Debug",0);
+					HWND hList = GetDlgItem( hDlg, IDC_LISTHEADERS );
+					POINT pt = { (signed short)LOWORD( lParam ), (signed short)HIWORD( lParam ) };
+					HTREEITEM hItem = 0;
+					if (pt.x==-1) pt.x = 0;
+					if (pt.y==-1) pt.y = 0;
+					if (int numRows = ListView_GetItemCount(hList)){
+						HMENU hMenu = CreatePopupMenu();
+						AppendMenu(hMenu, MF_STRING, (UINT_PTR)1, TranslateT("Copy Selected"));
+						AppendMenu(hMenu, MF_STRING, (UINT_PTR)2, TranslateT("Copy All"));
+						AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
+						AppendMenu(hMenu, MF_STRING, (UINT_PTR)0, TranslateT("Cancel"));
+						int nReturnCmd = TrackPopupMenu( hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL );
+						DestroyMenu( hMenu );
+						if (nReturnCmd>0){
+							int courRow=0;
+							size_t sizeNeeded = 0;
+							WCHAR headname[64]={0}, headvalue[256]={0}; 
+							for (courRow=0;courRow<numRows;courRow++){
+								if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+								ListView_GetItemText(hList, courRow, 0, headname, SIZEOF(headname));
+								ListView_GetItemText(hList, courRow, 1, headvalue, SIZEOF(headvalue));
+								size_t headnamelen=wcslen(headname);
+								if (headnamelen) sizeNeeded += 1 + headnamelen;
+								sizeNeeded += 3+wcslen(headvalue);
+							}
+							if (!sizeNeeded) {
+#ifdef _DEBUG
+								MessageBox(hDlg,"Nothing To Copy","Debug ShowHeaders",0);
+#endif
+							} else if(OpenClipboard(hDlg)){
+								EmptyClipboard();
+								HGLOBAL hData=GlobalAlloc(GMEM_MOVEABLE,(sizeNeeded+1)*sizeof(WCHAR));
+								WCHAR *buff = (WCHAR *)GlobalLock(hData);
+								int courPos = 0;
+								for (courRow=0;courRow<numRows;courRow++){
+									if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+									ListView_GetItemText(hList, courRow, 0, headname, SIZEOF(headname));
+									ListView_GetItemText(hList, courRow, 1, headvalue, SIZEOF(headvalue));
+									if (wcslen(headname)) courPos += swprintf(&buff[courPos],L"%s:\t%s\r\n",headname,headvalue);
+									else courPos += swprintf(&buff[courPos],L"\t%s\r\n",headvalue);
+								}
+								GlobalUnlock(hData);
+								SetClipboardData(CF_UNICODETEXT,hData);
+								CloseClipboard();
+							}
+						}
+					}
+			}	}
+			break; // just in case
+	}
+	return 0;
+}
+
+DWORD WINAPI ShowEmailThread(LPVOID Param){
+	struct MailShowMsgWinParam MyParam;
+	MyParam=*(struct MailShowMsgWinParam *)Param;
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ShowMessage:Incrementing \"using threads\" %x (account %x)\n",MyParam.account->UsingThreads,MyParam.account);
+	#endif
+	SCIncFcn(MyParam.account->UsingThreads);
+	SetEvent(MyParam.ThreadRunningEV);
+	if (MyParam.mail->MsgWindow){
+		//if (!BringWindowToTop(MyParam.mail->MsgWindow)) {
+		if (!SetForegroundWindow(MyParam.mail->MsgWindow)) {
+			SendMessage(MyParam.mail->MsgWindow,WM_DESTROY,0,0);
+			MyParam.mail->MsgWindow = 0;
+			goto CREADTEVIEWMESSAGEWINDOW;
+		}else{
+			if (IsIconic(MyParam.mail->MsgWindow)){
+				OpenIcon(MyParam.mail->MsgWindow);
+			}
+		}
+	} else {
+CREADTEVIEWMESSAGEWINDOW:
+		MyParam.mail->MsgWindow = CreateDialogParamW(YAMNVar.hInst,MAKEINTRESOURCEW(IDD_DLGSHOWMESSAGE),NULL,(DLGPROC)DlgProcYAMNShowMessage,(LPARAM)&MyParam);
+		WindowList_Add(YAMNVar.MessageWnds,MyParam.mail->MsgWindow,NULL);
+		MSG msg;
+		while(GetMessage(&msg,NULL,0,0)){
+			if(!IsDialogMessage(MyParam.mail->MsgWindow, &msg)){
+				TranslateMessage(&msg);
+				DispatchMessage(&msg);
+		}	}
+		WindowList_Remove(YAMNVar.MessageWnds,MyParam.mail->MsgWindow);
+		MyParam.mail->MsgWindow = NULL;
+	}
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ShowMessage:Decrementing \"using threads\" %x (account %x)\n",MyParam.account->UsingThreads,MyParam.account);
+	#endif
+	SCDecFcn(MyParam.account->UsingThreads);
+	delete Param;
+	return 1;
+}
+
+BOOL CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+		{
+			HACCOUNT ActualAccount;
+			struct MailBrowserWinParam *MyParam=(struct MailBrowserWinParam *)lParam;
+			struct CMailWinUserInfo *mwui;
+
+			ListView_SetUnicodeFormat(GetDlgItem(hDlg,IDC_LISTMAILS),TRUE);
+			ListView_SetExtendedListViewStyle(GetDlgItem(hDlg,IDC_LISTMAILS),LVS_EX_FULLROWSELECT);
+
+			ActualAccount=MyParam->account;
+			mwui=new struct CMailWinUserInfo;
+			mwui->Account=ActualAccount;
+			mwui->TrayIconState=0;
+			mwui->UpdateMailsMessagesAccess=FALSE;
+			mwui->Seen=FALSE;
+			mwui->RunFirstTime=TRUE;
+
+			SetWindowLongPtr(hDlg,DWLP_USER,(LONG_PTR)mwui);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read wait\n");
+			#endif
+			if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+			{
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read enter failed\n");
+				#endif
+				DestroyWindow(hDlg);
+				return FALSE;
+			}
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read enter\n");
+			#endif
+
+			SendMessageW(GetDlgItem(hDlg,IDC_BTNAPP),WM_SETTEXT,(WPARAM)0,(LPARAM)TranslateW(L"Run application"));
+			SendMessageW(GetDlgItem(hDlg,IDC_BTNDEL),WM_SETTEXT,(WPARAM)0,(LPARAM)TranslateW(L"Delete selected"));
+			SendMessageW(GetDlgItem(hDlg,IDC_BTNCHECKALL),WM_SETTEXT,(WPARAM)0,(LPARAM)TranslateW(L"Select All"));
+			SendMessageW(GetDlgItem(hDlg,IDC_BTNOK),WM_SETTEXT,(WPARAM)0,(LPARAM)TranslateW(L"OK"));
+
+			LVCOLUMNW lvc0={LVCF_FMT | LVCF_TEXT | LVCF_WIDTH,LVCFMT_LEFT,FromWidth,TranslateW(L"From"),0,0};
+			LVCOLUMNW lvc1={LVCF_FMT | LVCF_TEXT | LVCF_WIDTH,LVCFMT_LEFT,SubjectWidth,TranslateW(L"Subject"),0,0};
+			LVCOLUMNW lvc2={LVCF_FMT | LVCF_TEXT | LVCF_WIDTH,LVCFMT_LEFT,SizeWidth,TranslateW(L"Size"),0,0};
+			LVCOLUMNW lvc3={LVCF_FMT | LVCF_TEXT | LVCF_WIDTH,LVCFMT_LEFT,SizeDate,TranslateW(L"Date"),0,0};
+			SendMessageW(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_INSERTCOLUMNW,(WPARAM)0,(LPARAM)&lvc0);
+			SendMessageW(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_INSERTCOLUMNW,(WPARAM)1,(LPARAM)&lvc1);
+			SendMessageW(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_INSERTCOLUMNW,(WPARAM)2,(LPARAM)&lvc2);
+			SendMessageW(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_INSERTCOLUMNW,(WPARAM)3,(LPARAM)&lvc3);
+
+			if((ActualAccount->NewMailN.App!=NULL) && (wcslen(ActualAccount->NewMailN.App)))
+				EnableWindow(GetDlgItem(hDlg,IDC_BTNAPP),(WPARAM)TRUE);
+			else
+				EnableWindow(GetDlgItem(hDlg,IDC_BTNAPP),(WPARAM)FALSE);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read done\n");
+			#endif
+			ReadDoneFcn(ActualAccount->AccountAccessSO);
+
+			WindowList_Add(YAMNVar.MessageWnds,hDlg,NULL);
+			WindowList_Add(YAMNVar.NewMailAccountWnd,hDlg,ActualAccount);
+
+			{
+				char accstatus[512];
+
+				GetStatusFcn(ActualAccount,accstatus);
+				SetDlgItemTextA(hDlg,IDC_STSTATUS,accstatus);
+			}
+			SetTimer(hDlg,TIMER_FLASHING,500,NULL);
+
+			if(ActualAccount->hContact != NULL)
+			{
+				CallService(MS_CLIST_REMOVEEVENT,(WPARAM)ActualAccount->hContact,(LPARAM)"yamn new mail message");
+			}
+
+			OldListViewSubclassProc = (WNDPROC) SetWindowLongPtr(GetDlgItem(hDlg, IDC_LISTMAILS), GWLP_WNDPROC, (LONG_PTR) ListViewSubclassProc);
+
+			break;
+		}
+		case WM_DESTROY:
+		{
+			HACCOUNT ActualAccount;
+			RECT coord;
+			LVCOLUMNW ColInfo;
+			NOTIFYICONDATA nid;
+			HYAMNMAIL Parser;
+			struct CMailWinUserInfo *mwui;
+
+			mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				break;
+			ColInfo.mask=LVCF_WIDTH;
+			if(ListView_GetColumn(GetDlgItem(hDlg,IDC_LISTMAILS),0,&ColInfo))
+				FromWidth=ColInfo.cx;
+			if(ListView_GetColumn(GetDlgItem(hDlg,IDC_LISTMAILS),1,&ColInfo))
+				SubjectWidth=ColInfo.cx;
+			if(ListView_GetColumn(GetDlgItem(hDlg,IDC_LISTMAILS),2,&ColInfo))
+				SizeWidth=ColInfo.cx;
+			if(ListView_GetColumn(GetDlgItem(hDlg,IDC_LISTMAILS),3,&ColInfo))
+				SizeDate=ColInfo.cx;
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:DESTROY:save window position\n");
+			#endif
+			if(!YAMNVar.Shutdown && GetWindowRect(hDlg,&coord))	//the YAMNVar.Shutdown testing is because M<iranda strange functionality at shutdown phase, when call to DBWriteContactSetting freezes calling thread
+			{
+				PosX=coord.left;
+				SizeX=coord.right-coord.left;
+				PosY=coord.top;
+				SizeY=coord.bottom-coord.top;
+				DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBPOSX,PosX);
+				DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBPOSY,PosY);
+				DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBSIZEX,SizeX);
+				DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBSIZEY,SizeY);
+			}
+			KillTimer(hDlg,TIMER_FLASHING);
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:DESTROY:remove window from list\n");
+			#endif
+			WindowList_Remove(YAMNVar.NewMailAccountWnd,hDlg);
+			WindowList_Remove(YAMNVar.MessageWnds,hDlg);
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write wait\n");
+			#endif
+			if(WAIT_OBJECT_0!=WaitToWriteFcn(ActualAccount->MessagesAccessSO))
+			{
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write wait failed\n");
+				#endif
+				break;
+			}
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write enter\n");
+			#endif
+			//delete mails from queue, which are deleted from server (spam level 3 mails e.g.)
+			for(Parser=(HYAMNMAIL)ActualAccount->Mails;Parser!=NULL;Parser=Parser->Next)
+			{
+				if((Parser->Flags & YAMN_MSG_DELETED) && YAMN_MSG_SPAML(Parser->Flags,YAMN_MSG_SPAML3) && mwui->Seen)		//if spaml3 was already deleted and user knows about it
+				{
+					DeleteMessageFromQueueFcn((HYAMNMAIL *)&ActualAccount->Mails,Parser,1);
+					CallService(MS_YAMN_DELETEACCOUNTMAIL,(WPARAM)ActualAccount->Plugin,(LPARAM)Parser);
+				}
+			}
+
+			//mark mails as read (remove "new" and "unseen" flags)
+			if(mwui->Seen)
+				SetRemoveFlagsInQueueFcn((HYAMNMAIL)ActualAccount->Mails,YAMN_MSG_DISPLAY,0,YAMN_MSG_NEW | YAMN_MSG_UNSEEN,0);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write done\n");
+			#endif
+			WriteDoneFcn(ActualAccount->MessagesAccessSO);
+
+			ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
+
+			delete mwui;
+			SetWindowLongPtr(hDlg,DWLP_USER,(LONG_PTR)NULL);
+
+			nid.cbSize=sizeof(NOTIFYICONDATA);
+			nid.hWnd=hDlg;
+			nid.uID=0;
+			Shell_NotifyIcon(NIM_DELETE,&nid);
+			PostQuitMessage(0);
+		}
+			break;
+		case WM_SHOWWINDOW:
+		{
+			struct CMailWinUserInfo *mwui;
+
+			if(NULL==(mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER)))
+				return 0;
+			mwui->Seen=TRUE;
+		}
+		case WM_YAMN_CHANGESTATUS:
+		{
+			HACCOUNT ActualAccount;
+			char accstatus[512];
+
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				break;
+			if((HACCOUNT)wParam!=ActualAccount)
+				break;
+			GetStatusFcn(ActualAccount,accstatus);
+			SetDlgItemTextA(hDlg,IDC_STSTATUS,accstatus);
+		}
+			return 1;
+		case WM_YAMN_CHANGECONTENT:
+		{
+			struct CUpdateMails UpdateParams;
+			BOOL ThisThreadWindow=(GetCurrentThreadId()==GetWindowThreadProcessId(hDlg,NULL));
+
+			if(NULL==(UpdateParams.Copied=CreateEvent(NULL,FALSE,FALSE,NULL)))
+			{
+				DestroyWindow(hDlg);
+				return 0;
+			}
+			UpdateParams.Flags=(struct CChangeContent *)lParam;
+			UpdateParams.Waiting=!ThisThreadWindow;
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:CHANGECONTENT:posting UPDATEMAILS\n");
+			#endif
+			if(ThisThreadWindow)
+			{
+				if(!UpdateMails(hDlg,(HACCOUNT)wParam,UpdateParams.Flags->nflags,UpdateParams.Flags->nnflags))
+					DestroyWindow(hDlg);
+			}
+			else if(PostMessage(hDlg,WM_YAMN_UPDATEMAILS,wParam,(LPARAM)&UpdateParams))	//this ensures UpdateMails will execute the thread who created the browser window
+			{
+				if(!ThisThreadWindow)
+				{
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:CHANGECONTENT:waiting for event\n");
+					#endif
+					WaitForSingleObject(UpdateParams.Copied,INFINITE);
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:CHANGECONTENT:event signaled\n");
+					#endif
+				}
+			}
+
+			CloseHandle(UpdateParams.Copied);
+		}
+			return 1;
+		case WM_YAMN_UPDATEMAILS:
+		{
+			HACCOUNT ActualAccount;
+
+			struct CUpdateMails *um=(struct CUpdateMails *)lParam;
+			DWORD nflags,nnflags;
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:UPDATEMAILS\n");
+			#endif
+
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				return 0;
+			if((HACCOUNT)wParam!=ActualAccount)
+				return 0;
+
+			nflags=um->Flags->nflags;
+			nnflags=um->Flags->nnflags;
+
+			if(um->Waiting)
+				SetEvent(um->Copied);
+
+			if(!UpdateMails(hDlg,ActualAccount,nflags,nnflags))
+				DestroyWindow(hDlg);
+		}
+			return 1;
+		case WM_YAMN_STOPACCOUNT:
+		{
+			HACCOUNT ActualAccount;
+
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				break;
+			if((HACCOUNT)wParam!=ActualAccount)
+				break;
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:STOPACCOUNT:sending destroy msg\n");
+			#endif
+			PostQuitMessage(0);
+		}
+			return 1;
+		case WM_YAMN_NOTIFYICON:
+		{
+			HACCOUNT ActualAccount;
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				break;
+
+			switch(lParam)
+			{
+				case WM_LBUTTONDBLCLK:
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read wait\n");
+					#endif
+					if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+					{
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read wait failed\n");
+						#endif
+						return 0;
+					}
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read enter\n");
+					#endif
+					if(ActualAccount->AbilityFlags & YAMN_ACC_BROWSE)
+					{
+						ShowWindow(hDlg,SW_SHOWNORMAL);
+						SetForegroundWindow(hDlg);
+					}
+					else
+						DestroyWindow(hDlg);
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read done\n");
+					#endif
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+					break;
+			}
+			break;
+		}
+		case WM_YAMN_SHOWSELECTED:
+		{
+			int iSelect;
+			iSelect=SendMessage(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_GETNEXTITEM,-1,MAKELPARAM((UINT)LVNI_FOCUSED,0)); // return item selected
+
+			if(iSelect!=-1) 
+			{
+				LV_ITEMW item;
+				HYAMNMAIL ActualMail;
+
+				item.iItem=iSelect;
+				item.iSubItem=0;
+				item.mask=LVIF_PARAM | LVIF_STATE;
+				item.stateMask=0xFFFFFFFF;
+				ListView_GetItem(GetDlgItem(hDlg,IDC_LISTMAILS),&item);
+				ActualMail=(HYAMNMAIL)item.lParam;
+				if(NULL!=ActualMail)
+				{
+					//ShowEmailThread
+					PYAMN_MAILSHOWPARAM MailParam = new YAMN_MAILSHOWPARAM;
+					MailParam->account = GetWindowAccount(hDlg);
+					MailParam->mail = ActualMail;
+					if(NULL!=(MailParam->ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL))){
+						HANDLE NewThread;
+						if(NULL!=(NewThread=CreateThread(NULL,0,ShowEmailThread,MailParam,0,NULL)))
+						{
+							//WaitForSingleObject(MailParam->ThreadRunningEV,INFINITE);
+							CloseHandle(NewThread);
+						}
+						CloseHandle(MailParam->ThreadRunningEV);
+					}
+					//delete MailParam;
+				}
+			}
+		} break;
+		case WM_SYSCOMMAND:
+		{
+			HACCOUNT ActualAccount;
+
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				break;
+			switch(wParam)
+			{
+				case SC_CLOSE:
+					DestroyWindow(hDlg);
+					break;
+			}
+		}
+			break;
+
+		case WM_COMMAND:
+		{
+			HACCOUNT ActualAccount;
+			int Items;
+
+			if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+				break;
+
+			switch(LOWORD(wParam))
+			{
+				case IDC_BTNCHECKALL:
+					ListView_SetItemState(GetDlgItem(hDlg,IDC_LISTMAILS), -1, 0, LVIS_SELECTED); // deselect all items
+					ListView_SetItemState(GetDlgItem(hDlg,IDC_LISTMAILS),-1, LVIS_SELECTED ,LVIS_SELECTED);
+					Items = ListView_GetItemCount(GetDlgItem(hDlg,IDC_LISTMAILS));
+					ListView_RedrawItems(GetDlgItem(hDlg,IDC_LISTMAILS), 0, Items);
+					UpdateWindow(GetDlgItem(hDlg,IDC_LISTMAILS));
+					SetFocus(GetDlgItem(hDlg,IDC_LISTMAILS));
+					break;
+
+				case IDC_BTNOK:
+					DestroyWindow(hDlg);
+					break;
+
+				case IDC_BTNAPP:
+				{
+					PROCESS_INFORMATION pi;
+					STARTUPINFOW si;
+
+					ZeroMemory(&si,sizeof(si));
+					si.cb=sizeof(si);
+
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read wait\n");
+					#endif
+					if(WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
+					{
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read enter\n");
+						#endif
+						if(ActualAccount->NewMailN.App!=NULL)
+						{
+							WCHAR *Command;
+							if(ActualAccount->NewMailN.AppParam!=NULL)
+								Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+wcslen(ActualAccount->NewMailN.AppParam)+6];
+							else
+								Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+6];
+						
+							if(Command!=NULL)
+							{
+								lstrcpyW(Command,L"\"");
+								lstrcatW(Command,ActualAccount->NewMailN.App);
+								lstrcatW(Command,L"\" ");
+								if(ActualAccount->NewMailN.AppParam!=NULL)
+									lstrcatW(Command,ActualAccount->NewMailN.AppParam);
+								CreateProcessW(NULL,Command,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
+								delete[] Command;
+							}
+						}
+
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read done\n");
+						#endif
+						ReadDoneFcn(ActualAccount->AccountAccessSO);
+					}
+					#ifdef DEBUG_SYNCHRO
+					else
+						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read enter failed\n");
+					#endif
+					if(!(GetKeyState(VK_SHIFT) & 0x8000) && !(GetKeyState(VK_CONTROL) & 0x8000))
+						DestroyWindow(hDlg);
+
+				}
+					break;
+				case IDC_BTNDEL:
+				{
+					LVITEMW item;
+					HYAMNMAIL FirstMail=NULL,ActualMail;
+					HANDLE ThreadRunningEV;
+					DWORD tid,Total=0;
+
+					//	we use event to signal, that running thread has all needed stack parameters copied
+					if(NULL==(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+						break;
+					int Items=ListView_GetItemCount(GetDlgItem(hDlg,IDC_LISTMAILS));
+
+					item.stateMask=0xFFFFFFFF;
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write wait\n");
+					#endif
+					if(WAIT_OBJECT_0==WaitToWriteFcn(ActualAccount->MessagesAccessSO))
+					{
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write enter\n");
+						#endif
+						for(int i=0;i<Items;i++)
+						{
+							item.iItem=i;
+							item.iSubItem=0;
+							item.mask=LVIF_PARAM | LVIF_STATE;
+							item.stateMask=0xFFFFFFFF;
+							ListView_GetItem(GetDlgItem(hDlg,IDC_LISTMAILS),&item);
+							ActualMail=(HYAMNMAIL)item.lParam;
+							if(NULL==ActualMail)
+								break;
+							if(item.state & LVIS_SELECTED)
+							{
+								ActualMail->Flags|=YAMN_MSG_USERDELETE;	//set to mail we are going to delete it
+								Total++;
+							}
+						}
+
+						// Enable write-access to mails
+						#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write done\n");
+						#endif
+						WriteDoneFcn(ActualAccount->MessagesAccessSO);
+
+						if(Total)
+						{
+							char DeleteMsg[1024];
+
+							sprintf(DeleteMsg,Translate("Do you really want to delete %d selected mails?"),Total);
+							if(IDOK==MessageBox(hDlg,DeleteMsg,Translate("Delete confirmation"),MB_OKCANCEL | MB_ICONWARNING))
+							{
+								struct DeleteParam ParamToDeleteMails={YAMN_DELETEVERSION,ThreadRunningEV,ActualAccount,NULL};
+
+								// Find if there's mail marked to delete, which was deleted before
+								#ifdef DEBUG_SYNCHRO
+								DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write wait\n");
+								#endif
+								if(WAIT_OBJECT_0==WaitToWriteFcn(ActualAccount->MessagesAccessSO))
+								{
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write enter\n");
+									#endif
+									for(ActualMail=(HYAMNMAIL)ActualAccount->Mails;ActualMail!=NULL;ActualMail=ActualMail->Next)
+									{
+										if((ActualMail->Flags & YAMN_MSG_DELETED) && ((ActualMail->Flags & YAMN_MSG_USERDELETE)))	//if selected mail was already deleted
+										{
+											DeleteMessageFromQueueFcn((HYAMNMAIL *)&ActualAccount->Mails,ActualMail,1);
+											CallService(MS_YAMN_DELETEACCOUNTMAIL,(WPARAM)ActualAccount->Plugin,(LPARAM)ActualMail);	//delete it from memory
+											continue;
+										}
+									}
+									// Set flag to marked mails that they can be deleted
+									SetRemoveFlagsInQueueFcn((HYAMNMAIL)ActualAccount->Mails,YAMN_MSG_DISPLAY | YAMN_MSG_USERDELETE,0,YAMN_MSG_DELETEOK,1);
+									// Create new thread which deletes marked mails.
+									HANDLE NewThread;
+
+									if(NULL!=(NewThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ActualAccount->Plugin->Fcn->DeleteMailsFcnPtr,(LPVOID)&ParamToDeleteMails,0,&tid)))
+									{
+										WaitForSingleObject(ThreadRunningEV,INFINITE);
+										CloseHandle(NewThread);
+									}
+									// Enable write-access to mails
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write done\n");
+									#endif
+									WriteDoneFcn(ActualAccount->MessagesAccessSO);
+								}
+							}
+							else
+								//else mark messages that they are not to be deleted
+								SetRemoveFlagsInQueueFcn((HYAMNMAIL)ActualAccount->Mails,YAMN_MSG_DISPLAY | YAMN_MSG_USERDELETE,0,YAMN_MSG_USERDELETE,0);
+						}
+					}
+					CloseHandle(ThreadRunningEV);
+					if(DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_CLOSEDELETE, 0))
+						DestroyWindow(hDlg);
+
+				}
+				break;
+			}
+		}
+			break;
+		case WM_SIZE:
+			if(wParam==SIZE_RESTORED)
+			{
+				LONG x=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
+				LONG y=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
+				MoveWindow(GetDlgItem(hDlg,IDC_BTNDEL),     5            ,y-5-25,(x-20)/3,25,TRUE);	//where to put DELETE button while resizing
+				MoveWindow(GetDlgItem(hDlg,IDC_BTNCHECKALL),10+  (x-20)/3,y-5-25,(x-20)/6,25,TRUE);	//where to put CHECK ALL button while resizing				
+				MoveWindow(GetDlgItem(hDlg,IDC_BTNAPP),     15+  (x-20)/3 + (x-20)/6,y-5-25,(x-20)/3,25,TRUE);	//where to put RUN APP button while resizing
+				MoveWindow(GetDlgItem(hDlg,IDC_BTNOK),      20+2*(x-20)/3 + (x-20)/6 ,y-5-25,(x-20)/6,25,TRUE);	//where to put OK button while resizing
+				MoveWindow(GetDlgItem(hDlg,IDC_LISTMAILS),  5         ,5     ,x-10    ,y-55,TRUE);	//where to put list mail window while resizing
+				MoveWindow(GetDlgItem(hDlg,IDC_STSTATUS),   5         ,y-5-45     ,x-10    ,15,TRUE);	//where to put account status text while resizing
+			}
+//			break;
+			return 0;
+		case WM_GETMINMAXINFO:
+			((LPMINMAXINFO)lParam)->ptMinTrackSize.x=MAILBROWSER_MINXSIZE;
+			((LPMINMAXINFO)lParam)->ptMinTrackSize.y=MAILBROWSER_MINYSIZE;
+			return 0;
+		case WM_TIMER:
+		{
+			NOTIFYICONDATA nid;
+			struct CMailWinUserInfo *mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
+
+			ZeroMemory(&nid,sizeof(nid));
+			nid.cbSize=sizeof(NOTIFYICONDATA);
+			nid.hWnd=hDlg;
+			nid.uID=0;
+			nid.uFlags=NIF_ICON;
+			if(mwui->TrayIconState==0)
+				nid.hIcon=hYamnIcons[0];
+			else
+				nid.hIcon=hYamnIcons[2];
+			Shell_NotifyIcon(NIM_MODIFY,&nid);
+			mwui->TrayIconState=!mwui->TrayIconState;
+//			UpdateWindow(hDlg);
+		}
+			break;
+		case WM_NOTIFY:
+			switch(((LPNMHDR)lParam)->idFrom)
+			{
+				
+				case IDC_LISTMAILS:
+				{
+
+					switch(((LPNMHDR)lParam)->code)
+					{
+						case NM_DBLCLK:
+							SendMessage(hDlg,WM_YAMN_SHOWSELECTED,0,0);
+							break;
+						case LVN_COLUMNCLICK:
+							HACCOUNT ActualAccount;
+							if(NULL!=(ActualAccount=GetWindowAccount(hDlg))){
+								NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lParam;
+								if(WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
+								{
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:COLUMNCLICK:ActualAccountSO-read enter\n");
+									#endif
+									switch((int)pNMListView->iSubItem)
+									{
+										case 0:
+											bFrom = !bFrom;
+											break;
+										case 1:
+											bSub = !bSub;
+											break;
+										case 2:
+											bSize = !bSize;
+											break;
+										case 3:
+											bDate = !bDate;
+											break;
+										default:
+											break;
+									}
+									ListView_SortItems(pNMListView->hdr.hwndFrom,ListViewCompareProc,pNMListView->iSubItem);
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read done\n");
+									#endif
+									ReadDoneFcn(ActualAccount->AccountAccessSO);
+							}	}
+							break;
+
+						case NM_CUSTOMDRAW:
+						{
+							HACCOUNT ActualAccount;
+							LPNMLVCUSTOMDRAW cd=(LPNMLVCUSTOMDRAW)lParam;
+							LONG_PTR PaintCode;
+
+							if(NULL==(ActualAccount=GetWindowAccount(hDlg)))
+								break;
+
+							switch(cd->nmcd.dwDrawStage)
+							{
+								case CDDS_PREPAINT:
+									PaintCode=CDRF_NOTIFYITEMDRAW;
+									break;
+								case CDDS_ITEMPREPAINT:
+									PaintCode=CDRF_NOTIFYSUBITEMDRAW;
+									break;
+								case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
+								{
+//									COLORREF crText, crBkgnd;
+//									crText= RGB(128,128,255);
+									HYAMNMAIL ActualMail;
+									BOOL umma;
+
+									{
+										struct CMailWinUserInfo *mwui;
+										mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
+										umma= mwui->UpdateMailsMessagesAccess;
+									}
+									ActualMail=(HYAMNMAIL)cd->nmcd.lItemlParam;
+									if(!ActualMail) 
+										ActualMail=(HYAMNMAIL)readItemLParam(cd->nmcd.hdr.hwndFrom,cd->nmcd.dwItemSpec);
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read wait\n");
+									#endif
+									if(!umma)
+										if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->MessagesAccessSO))
+										{
+											#ifdef DEBUG_SYNCHRO
+											DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read wait failed\n");
+											#endif
+											return 0;
+										}
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read enter\n");
+									#endif
+									switch(ActualMail->Flags & YAMN_MSG_SPAMMASK)
+									{
+										case YAMN_MSG_SPAML1:
+										case YAMN_MSG_SPAML2:
+											cd->clrText=RGB(150,150,150);
+											break;
+										case YAMN_MSG_SPAML3:
+											cd->clrText=RGB(200,200,200);
+											cd->clrTextBk=RGB(160,160,160);
+											break;
+										case 0:
+											if(cd->nmcd.dwItemSpec & 1)
+												cd->clrTextBk=RGB(230,230,230);
+											break;
+										default:
+											break;
+									}
+									if(ActualMail->Flags & YAMN_MSG_UNSEEN)
+										cd->clrTextBk=RGB(220,235,250);
+									PaintCode=CDRF_DODEFAULT;
+
+									if(!umma)
+									{
+										#ifdef DEBUG_SYNCHRO
+										DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read done\n");
+										#endif
+										ReadDoneFcn(ActualAccount->MessagesAccessSO);
+									}
+
+									break;
+								}
+							}
+							SetWindowLongPtr(hDlg,DWLP_MSGRESULT,PaintCode);
+								return 1;
+						}
+					}
+				}
+			}
+			break;
+		case WM_CONTEXTMENU:
+			{
+				if ( GetWindowLongPtr(( HWND )wParam, GWLP_ID ) == IDC_LISTMAILS)	{
+					//MessageBox(0,"LISTHEADERS","Debug",0);
+					HWND hList = GetDlgItem( hDlg, IDC_LISTMAILS );
+					POINT pt = { (signed short)LOWORD( lParam ), (signed short)HIWORD( lParam ) };
+					HTREEITEM hItem = 0;
+					if (pt.x==-1) pt.x = 0;
+					if (pt.y==-1) pt.y = 0;
+					if (int numRows = ListView_GetItemCount(hList)){
+						HMENU hMenu = CreatePopupMenu();
+						AppendMenu(hMenu, MF_STRING, (UINT_PTR)1, TranslateT("Copy Selected"));
+						AppendMenu(hMenu, MF_STRING, (UINT_PTR)2, TranslateT("Copy All"));
+						AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
+						AppendMenu(hMenu, MF_STRING, (UINT_PTR)0, TranslateT("Cancel"));
+						int nReturnCmd = TrackPopupMenu( hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL );
+						DestroyMenu( hMenu );
+						if (nReturnCmd>0){
+							int courRow=0;
+							size_t sizeNeeded = 0;
+							WCHAR from[128]={0}, subject[256]={0}, size[16]={0}, date[64]={0};
+							for (courRow=0;courRow<numRows;courRow++){
+								if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+								ListView_GetItemText(hList, courRow, 0, from, SIZEOF(from));
+								ListView_GetItemText(hList, courRow, 1, subject, SIZEOF(subject));
+								ListView_GetItemText(hList, courRow, 2, size, SIZEOF(size));
+								ListView_GetItemText(hList, courRow, 3, date, SIZEOF(date));
+								sizeNeeded += 5+wcslen(from)+wcslen(subject)+wcslen(size)+wcslen(date);
+							}
+							if (!sizeNeeded) {
+#ifdef _DEBUG
+								MessageBox(hDlg,"Nothing To Copy","Debug MailBrowser",0);
+#endif
+							} else if(OpenClipboard(hDlg)){
+								EmptyClipboard();
+								HGLOBAL hData=GlobalAlloc(GMEM_MOVEABLE,(sizeNeeded+1)*sizeof(WCHAR));
+								WCHAR *buff = (WCHAR *)GlobalLock(hData);
+								int courPos = 0;
+								for (courRow=0;courRow<numRows;courRow++){
+									if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+									ListView_GetItemText(hList, courRow, 0, from, SIZEOF(from));
+									ListView_GetItemText(hList, courRow, 1, subject, SIZEOF(subject));
+									ListView_GetItemText(hList, courRow, 2, size, SIZEOF(size));
+									ListView_GetItemText(hList, courRow, 3, date, SIZEOF(date));
+									courPos += swprintf(&buff[courPos],L"%s\t%s\t%s\t%s\r\n",from,subject,size,date);
+								}
+								GlobalUnlock(hData);
+								SetClipboardData(CF_UNICODETEXT,hData);
+								CloseClipboard();
+							}
+						}
+					}
+			}	}
+			break; // just in case
+		default:
+			return 0;
+	}
+//	return DefWindowProc(hDlg,msg,wParam,lParam);
+	return 0;
+}
+
+LRESULT CALLBACK ListViewSubclassProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+	HWND hwndParent = GetParent(hDlg);
+	
+	switch(msg) {
+      case WM_GETDLGCODE :
+       {
+        LPMSG lpmsg;
+          if ( ( lpmsg = (LPMSG)lParam ) != NULL ) {
+             if ( lpmsg->message == WM_KEYDOWN
+             && lpmsg->wParam == VK_RETURN)
+           return DLGC_WANTALLKEYS;
+           }
+         break;
+       }
+		case WM_KEYDOWN:
+        {
+			
+            BOOL isCtrl = GetKeyState(VK_CONTROL) & 0x8000;
+            BOOL isShift = GetKeyState(VK_SHIFT) & 0x8000;
+            BOOL isAlt = GetKeyState(VK_MENU) & 0x8000;
+
+			switch (wParam) 
+			{
+				case 'A':  // ctrl-a
+					if(!isAlt && !isShift && isCtrl) SendMessage(hwndParent,WM_COMMAND,IDC_BTNCHECKALL,0);
+					break;
+				case VK_RETURN:
+				case VK_SPACE:
+					if(!isAlt && !isShift && !isCtrl) SendMessage(hwndParent,WM_YAMN_SHOWSELECTED,0,0);
+					break;
+				case VK_DELETE:
+					SendMessage(hwndParent,WM_COMMAND,IDC_BTNDEL,0);
+					break;
+			}
+			
+			break;
+
+		}
+	}
+	return CallWindowProc(OldListViewSubclassProc, hDlg, msg, wParam, lParam);
+}
+
+DWORD WINAPI MailBrowser(LPVOID Param)
+{
+	MSG msg;
+
+	HWND hMailBrowser;
+	BOOL WndFound=FALSE;
+	HACCOUNT ActualAccount;
+	struct MailBrowserWinParam MyParam;
+
+	MyParam=*(struct MailBrowserWinParam *)Param;
+	ActualAccount=MyParam.account;	
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"MailBrowser:Incrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+	#endif
+	SCIncFcn(ActualAccount->UsingThreads);
+
+//	we will not use params in stack anymore
+	SetEvent(MyParam.ThreadRunningEV);
+
+	__try
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"MailBrowser:ActualAccountSO-read wait\n");
+		#endif
+		if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+		{
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:ActualAccountSO-read wait failed\n");
+			#endif
+			return 0;
+		}
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"MailBrowser:ActualAccountSO-read enter\n");
+		#endif
+		if(!(ActualAccount->AbilityFlags & YAMN_ACC_BROWSE))
+		{
+			MyParam.nflags=MyParam.nflags & ~YAMN_ACC_MSG;
+			MyParam.nnflags=MyParam.nnflags & ~YAMN_ACC_MSG;
+		}
+		if(!(ActualAccount->AbilityFlags & YAMN_ACC_POPUP))
+			MyParam.nflags=MyParam.nflags & ~YAMN_ACC_POP;
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"MailBrowser:ActualAccountSO-read done\n");
+		#endif
+		ReadDoneFcn(ActualAccount->AccountAccessSO);
+
+		if(NULL!=(hMailBrowser=WindowList_Find(YAMNVar.NewMailAccountWnd,ActualAccount)))
+			WndFound=TRUE;
+		if((hMailBrowser==NULL) && ((MyParam.nflags & YAMN_ACC_MSG) || (MyParam.nflags & YAMN_ACC_ICO) || (MyParam.nnflags & YAMN_ACC_MSG)))
+		{
+			hMailBrowser=CreateDialogParamW(YAMNVar.hInst,MAKEINTRESOURCEW(IDD_DLGVIEWMESSAGES),NULL,(DLGPROC)DlgProcYAMNMailBrowser,(LPARAM)&MyParam);
+			SendMessageW(hMailBrowser,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)hYamnIcons[2]);
+			SendMessageW(hMailBrowser,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)hYamnIcons[2]);
+			MoveWindow(hMailBrowser,PosX,PosY,SizeX,SizeY,TRUE);
+		}
+
+		if(hMailBrowser!=NULL)
+		{
+			struct CChangeContent Params={MyParam.nflags,MyParam.nnflags};	//if this thread created window, just post message to update mails
+
+			SendMessageW(hMailBrowser,WM_YAMN_CHANGECONTENT,(WPARAM)ActualAccount,(LPARAM)&Params);	//we ensure this will do the thread who created the browser window
+		}
+		else
+			UpdateMails(NULL,ActualAccount,MyParam.nflags,MyParam.nnflags);	//update mails without displaying or refreshing any window
+
+		if((hMailBrowser!=NULL) && !WndFound)		//we process message loop only for thread that created window
+		{
+			while(GetMessage(&msg,NULL,0,0))
+			{
+				if(!IsDialogMessage(hMailBrowser, &msg))
+				{
+					TranslateMessage(&msg);
+					DispatchMessage(&msg);
+				}
+			}
+		}
+
+		if((!WndFound) && (ActualAccount->Plugin->Fcn!=NULL) && (ActualAccount->Plugin->Fcn->WriteAccountsFcnPtr!=NULL) && ActualAccount->AbleToWork)
+			ActualAccount->Plugin->Fcn->WriteAccountsFcnPtr();
+	}
+	__finally
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"MailBrowser:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+		#endif
+		SCDecFcn(ActualAccount->UsingThreads);
+	}
+	return 1;
+}
+
+INT_PTR RunMailBrowserSvc(WPARAM wParam,LPARAM lParam)
+{
+	DWORD tid;
+	//an event for successfull copy parameters to which point a pointer in stack for new thread
+	HANDLE ThreadRunningEV;
+	PYAMN_MAILBROWSERPARAM Param=(PYAMN_MAILBROWSERPARAM)wParam;
+
+	if((DWORD)lParam!=YAMN_MAILBROWSERVERSION)
+		return 0;
+
+	if(NULL!=(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+	{
+		HANDLE NewThread;
+
+		Param->ThreadRunningEV=ThreadRunningEV;
+		if(NULL!=(NewThread=CreateThread(NULL,0,MailBrowser,Param,0,&tid)))
+		{
+			WaitForSingleObject(ThreadRunningEV,INFINITE);
+			CloseHandle(NewThread);
+		}
+		CloseHandle(ThreadRunningEV);
+		return 1;
+	}
+	return 0;
+}
diff --git a/plugins/YAMN/debug.cpp b/plugins/YAMN/debug.cpp
new file mode 100644
index 0000000000..67fbf5ce09
--- /dev/null
+++ b/plugins/YAMN/debug.cpp
@@ -0,0 +1,142 @@
+/*
+ * YAMN plugin main file
+ * Miranda homepage: http://miranda-icq.sourceforge.net/
+ *
+ * Debug functions used in DEBUG release (you need to global #define DEBUG to get debug version)
+ *
+ * (c) majvan 2002-2004
+ */
+
+/*#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>*/
+#include "debug.h"
+#ifdef YAMN_DEBUG
+#include "yamn.h"
+#include "version.h"
+
+#if defined (WIN9X)
+	#define YAMN_VER	"YAMN " YAMN_VERSION_C " (Win9x)"
+#elif defined(WIN2IN1)
+	#define YAMN_VER	"YAMN " YAMN_VERSION_C " (2in1)"
+#else
+	#define YAMN_VER	"YAMN " YAMN_VERSION_C " (WinNT)"
+#endif
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+TCHAR DebugUserDirectory[MAX_PATH]=".";
+LPCRITICAL_SECTION FileAccessCS;
+
+#ifdef DEBUG_SYNCHRO
+TCHAR DebugSynchroFileName2[]=_T("%s\\yamn-debug.synchro.log");
+HANDLE SynchroFile;
+#endif
+
+#ifdef DEBUG_COMM
+TCHAR DebugCommFileName2[]=_T("%s\\yamn-debug.comm.log");
+HANDLE CommFile;
+#endif
+
+#ifdef DEBUG_DECODE
+TCHAR DebugDecodeFileName2[]=_T("%s\\yamn-debug.decode.log");
+HANDLE DecodeFile;
+#endif
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+void InitDebug()
+{
+#if defined (DEBUG_SYNCHRO) || defined (DEBUG_COMM) || defined (DEBUG_DECODE)
+	TCHAR DebugFileName[MAX_PATH];
+#endif
+	if(FileAccessCS==NULL)
+	{
+		FileAccessCS=new CRITICAL_SECTION;
+		InitializeCriticalSection(FileAccessCS);
+	}
+
+#ifdef DEBUG_SYNCHRO
+	_stprintf(DebugFileName,DebugSynchroFileName2,DebugUserDirectory);
+	
+	SynchroFile=CreateFile(DebugFileName,GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL);
+	DebugLog(SynchroFile,"Synchro debug file created by %s\n",YAMN_VER);
+#endif
+
+#ifdef DEBUG_COMM
+	_stprintf(DebugFileName,DebugCommFileName2,DebugUserDirectory);
+
+	CommFile=CreateFile(DebugFileName,GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL);
+	DebugLog(CommFile,"Communication debug file created by %s\n",YAMN_VER);
+#endif
+
+#ifdef DEBUG_DECODE
+	_stprintf(DebugFileName,DebugDecodeFileName2,DebugUserDirectory);
+
+	DecodeFile=CreateFile(DebugFileName,GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_ALWAYS,0,NULL);
+	DebugLog(DecodeFile,"Decoding kernel debug file created by %s\n",YAMN_VER);
+#endif
+}
+
+void UnInitDebug()
+{
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"File is being closed normally.");
+	CloseHandle(SynchroFile);
+#endif
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"File is being closed normally.");
+	CloseHandle(CommFile);
+#endif
+#ifdef DEBUG_DECODE
+	DebugLog(DecodeFile,"File is being closed normally.");
+	CloseHandle(DecodeFile);
+#endif
+}
+
+
+void DebugLog(HANDLE File,const char *fmt,...)
+{
+	char *str;
+	char tids[32];
+	va_list vararg;
+	int strsize;
+	DWORD Written;
+
+	va_start(vararg,fmt);
+	str=(char *)malloc(strsize=65536);
+	_stprintf(tids,_T("[%x]"),GetCurrentThreadId());
+	while(_vsnprintf(str,strsize,fmt,vararg)==-1)
+		str=(char *)realloc(str,strsize+=65536);
+	va_end(vararg);
+	EnterCriticalSection(FileAccessCS);
+	WriteFile(File,tids,(DWORD)strlen(tids),&Written,NULL);
+	WriteFile(File,str,(DWORD)strlen(str),&Written,NULL);
+	LeaveCriticalSection(FileAccessCS);
+	free(str);
+}
+
+void DebugLogW(HANDLE File,const WCHAR *fmt,...)
+{
+	WCHAR *str;
+	char tids[32];
+	va_list vararg;
+	int strsize;
+	DWORD Written;
+
+	va_start(vararg,fmt);
+	str=(WCHAR *)malloc((strsize=65536)*sizeof(WCHAR));
+	_stprintf(tids,_T("[%x]"),GetCurrentThreadId());
+	while(_vsnwprintf(str,strsize,fmt,vararg)==-1)
+		str=(WCHAR *)realloc(str,(strsize+=65536)*sizeof(WCHAR));
+	va_end(vararg);
+	EnterCriticalSection(FileAccessCS);
+	WriteFile(File,tids,(DWORD)strlen(tids),&Written,NULL);
+	WriteFile(File,str,(DWORD)wcslen(str)*sizeof(WCHAR),&Written,NULL);
+	LeaveCriticalSection(FileAccessCS);
+	free(str);
+}
+
+#endif	//ifdef DEBUG
\ No newline at end of file
diff --git a/plugins/YAMN/debug.h b/plugins/YAMN/debug.h
new file mode 100644
index 0000000000..df6977259c
--- /dev/null
+++ b/plugins/YAMN/debug.h
@@ -0,0 +1,64 @@
+#ifndef __DEBUG_H
+#define __DEBUG_H
+
+//	#define YAMN_DEBUG
+
+//#define YAMN_VER_BETA
+//#define YAMN_VER_BETA_CRASHONLY
+
+#ifdef YAMN_DEBUG
+
+//#pragma comment(lib, "th32.lib")
+
+#if !defined(_WIN32_WINNT)
+#define _WIN32_WINNT 0x0501 // WinXP only
+#endif
+#define VC_EXTRALEAN
+#include <windows.h>
+#include <tlhelp32.h>
+#include <stdio.h>
+#include <shlwapi.h>
+
+//#define DEBUG_SYNCHRO			//debug synchro to a file
+//#define DEBUG_COMM			//debug communiation to a file
+//#define DEBUG_DECODE			//debug header decoding to a file
+//#define DEBUG_DECODECODEPAGE		//add info about codepage used in conversion
+//#define DEBUG_DECODEBASE64		//add info about base64 result
+//#define DEBUG_DECODEQUOTED		//add info about quoted printable result
+//#define DEBUG_FILEREAD			//debug file reading to message boxes
+//#define DEBUG_FILEREADMESSAGES		//debug file reading messages to message boxes
+
+void DebugLog(HANDLE,const char *fmt,...);
+void DebugLogW(HANDLE File,const WCHAR *fmt,...);
+
+#ifdef DEBUG_SYNCHRO
+// Used for synchronization debug
+extern HANDLE SynchroFile;
+#endif
+
+#ifdef DEBUG_COMM
+// Used for communication debug
+extern HANDLE CommFile;
+#endif
+
+#ifdef DEBUG_DECODE
+// Used for decoding debug
+extern HANDLE DecodeFile;
+#endif
+
+#if defined(DEBUG_FILEREAD) || defined(DEBUG_FILEREADMESSAGES)
+DWORD ReadStringFromMemory(TCHAR **Parser,TCHAR *End,TCHAR **StoreTo,TCHAR *DebugString);
+	#ifndef UNICODE
+DWORD ReadStringFromMemoryW(TCHAR **Parser,TCHAR *End,TCHAR **StoreTo,TCHAR *DebugString);
+	#else
+#define ReadStringFromMemoryW	ReadStringFromMemory
+	#endif
+#endif
+
+//#ifdef DEBUG_ACCOUNTS
+//int GetAccounts();
+//void WriteAccounts();
+//#endif
+
+#endif	//YAMN_DEBUG
+#endif	//_DEBUG_H
diff --git a/plugins/YAMN/docs/InstallScript.xml b/plugins/YAMN/docs/InstallScript.xml
new file mode 100644
index 0000000000..33d8ac9dfd
--- /dev/null
+++ b/plugins/YAMN/docs/InstallScript.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<installscript>
+ <info>
+  <name>Yet Another Mail Notifier</name>
+  <author>majvan</author>
+  <version>0.2.4.7</version>
+  <type>Plugin</type>
+ </info>
+
+ <packageinfo>
+  <title>Plugin</title>
+  <file>YAMN.dll</file>
+ </packageinfo>
+
+ <packageinfo>
+  <optional/>
+  <title>Documentation</title>
+  <file>YAMN-Readme.txt</file>
+  <file>YAMN-License.txt</file>
+  <document/>
+ </packageinfo>
+
+ <packageinfo>
+  <optional/>
+  <title>Developers Information</title>
+  <file>YAMN-Readme.developers.txt</file>
+  <document/>
+ </packageinfo>
+
+ <packageinfo>
+  <optional/>
+  <title>Simple filter plugin</title>
+  <file>YAMN\simple.dll</file>
+  <file>YAMN\simple-readme.txt</file>
+ </packageinfo>
+
+ <packageinfo>
+  <optional/>
+  <title>Base filter plugin</title>
+  <file>YAMN\base.dll</file>
+  <file>YAMN\base-readme.txt</file>
+ </packageinfo>
+
+ <autorun>
+  <file>YAMN-Readme.txt</file>
+  <document/>
+ </autorun>
+
+</installscript>
diff --git a/plugins/YAMN/docs/YAMN-License.txt b/plugins/YAMN/docs/YAMN-License.txt
new file mode 100644
index 0000000000..7f1161073d
--- /dev/null
+++ b/plugins/YAMN/docs/YAMN-License.txt
@@ -0,0 +1,340 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/plugins/YAMN/docs/YAMN-Readme.developers.txt b/plugins/YAMN/docs/YAMN-Readme.developers.txt
new file mode 100644
index 0000000000..fdb338707c
--- /dev/null
+++ b/plugins/YAMN/docs/YAMN-Readme.developers.txt
@@ -0,0 +1,205 @@
+==================================================================================
+= YAMN plugin for Miranda (short readme for developers)                          =
+==================================================================================
+Hello developer! :)
+I hope YAMN will give you what you find, but you can also improve YAMN.
+
+This readme gives you some info about YAMN. Please read it first before you are 
+going to look at YAMN sources.
+
+YAMN provides two types of plugins now: protocol plugins and filter plugins.
+
+
+1.	What do you need to make your protocol plugin cooperating with YAMN
+	-------------------------------------------------------------------
+
+	If you want to cooperate with YAMN, you have to do some things. YAMN offers you some services,
+	so your work is easier, but YAMN needs some things to be done for proper work. These limits go
+	according thread synchronization and memory mutual exclusion.
+
+	YAMN  offers  you  two  types  of services. Exported functions and Miranda services. Miranda
+	services  are  described in header files, exported functions are described in cpp files. All
+	exported  functions  in  YAMN  have  the  suffix Fcn, so you can easy get if the function is
+	exported.  Using exported functions is more difficult than using miranda services, but after
+	solving some definitions, the work with exported functions is more clear and easier. Miranda
+	services  from  YAMN  are for miscellaneus functions. The fact Miranda service uses only two
+	parameters  and  therefore is sometimes very unsuitable leads us to make exported functions.
+	Exported  functions  are  divided in several parts: synchronizing functions (used for thread
+	and account synchronization) and MIME functions (used to work with MIME 
+	messages).
+
+	Miranda services are used through Miranda CallService function. YAMN exported functions are avialable
+	when registering plugin. Then YAMN gives you its table of exported functions.
+
+	How  to  write  write  your  protocol  plugin  for  YAMN? The best way for you is to look at
+	internal POP3 protocol, where all info about this is written. At start, you need to register
+	plugin  (it  is  done in two steps- registering and inserting to YAMN), then get pointers to
+	YAMN's  exported  functions  (using  Miranda's service MS_YAMN_GETFCN) you will need in your
+	protocol  plugin.  These  are the first steps you should do when implementing some plugin to
+	YAMN.  Next,  you  should  know  how  YAMN is stuctured. Structures of YAMN are described in
+	chapter  2.  And, at the end, you should know something about account synchronizing and some
+	limitations you have to achieve, if you want your plugin works well.
+
+
+2.	YAMN structures and memory organization
+	---------------------------------------
+
+	YAMN  uses  its  own  structures, that can change in the future. The problem with change is,
+	that  there  can occur some incomapatibilities between YAMN and plugins written for old YAMN
+	versions.  To  avoid  problems,  YAMN  defines  versions  for  services or exported/imported
+	functions, where strucutre version information is passed to/from plugins.
+
+
+2.1.	Structures of protcol plugin queue
+
+        (PYAMN_PROTOPLUGINQUEUE)FirstPlugin---> =(HYAMNPROTOPLUGIN)=  ---> =(HYAMNPROTOPLUGIN)=  ---> =(HYAMNPROTOPLUGIN)=  ---> NULL
+                                                |                  |  |    |                  |  |    |                  |  |
+                                                |         .        |  |    |         .        |  |    |         .        |  |
+                                                |         .        |  |    |         .        |  |    |         .        |  |
+                                                |         .        |  |    |         .        |  |    |         .        |  |
+                                                --------------------  |    |------------------|  |    |------------------|  |
+                                                |             Next |--|    |             Next |--|    |             Next |--|
+                                                ====================       ====================       ====================
+
+        This  structure  is not needed if you only create protocol plugin for YAMN. YAMN plugin does
+        not see and it is not important for it how YAMN works with plugins and how it stores plugins
+        data.   For   plugin   is   important   only  handle  for  its  own  plugin,  returned  from
+        MS_YAMN_REGISTERPLUGIN service.
+
+
+2.2.	Structure of accounts
+
+	Every  account  in  YAMN  belongs  to  exact  plugin  and  its  members  are  allocated with
+	MS_YAMN_CREATEPLUGINACCOUNT  service.  This  service cooperates with your function, which is
+	defined in your function import table. In your function (if you have defined it), you should
+	create  the whole account. It is because YAMN cannot know which members in structure did you
+	add.  So  you  create  the  whole derived structure. If your fcn is not implemented (NULL in
+	import table), YAMN creates standard account structure.
+
+	This  structure contains information (members) related to YAMN, to plugin and members shared
+	between both (plugin and YAMN). Therefore it is needed to synchronize access to members (see
+	Ch.  3).  Standard  YAMN  account  is  defined  in  m_account.h  header  file.  There's also
+	description  for every member how it is synchronised. YAMN creates two synchronizing objects
+	(SO)  to  synchronise access to members. In m_synchro.h file, there are definitions for easy
+	work with these SO.
+
+	Accounts are queued in plugin:
+
+        =(HYAMNPLUGIN)=  ---> ===(HACCOUNT)===  ---> ===(HACCOUNT)===  ---> ===(HACCOUNT)===  ---> NULL
+        |             |  |    |              |  |    |              |  |    |              |  |
+        |             |  |    |              |  |    |              |  |    |              |  |
+        |      .      |  |    |              |  |    |              |  |    |              |  |
+        |      .      |  |    |              |  |    |              |  |    |              |  |
+        |      .      |  |    |              |  |    |              |  |    |              |  |
+        |             |  |    |--------------|  |    |--------------|  |    |--------------|  |
+        | (HACCOUNT)  |  |    |         Next |--|    |         Next |--|    |         Next |--|
+        | FirstAccount|--|    ================       ================       ================
+        |-------------|
+        |             |
+        ===============
+
+        Every  account  has  its own back pointer to (HYAMNPLUGIN) in Plugin member, so you can easy
+        look at first account, when you have any other account (see m_account.h).
+
+
+2.3.	Structure of mails
+
+	Account  has a pointer to mails. Account's pointer to mails is pointer to first mail in fact
+	and mails are queued too:
+        
+        ==(HACCOUNT)==  ---> ==(HYAMNMAIL)==  ---> ==(HYAMNMAIL)==  ---> ==(HYAMNMAIL)==  ---> NULL
+        |            |  |    |             |  |    |             |  |    |             |  |
+        |      .     |  |    |             |  |    |             |  |    |             |  |
+        |      .     |  |    |             |  |    |             |  |    |             |  |
+        |      .     |  |    |             |  |    |             |  |    |             |  |
+        |            |  |    |-------------|  |    |-------------|  |    |-------------|  |
+        | (HYAMNMAIL)|  |    |        Next |--|    |        Next |--|    |        Next |--|
+        |       Mails|--|    ===============       ===============       ===============
+        |------------|
+        |            |
+	==============
+
+	Standard MIME mail is defined in mails/m_mails.h file. 
+
+	Plugin  can  work with accounts in its own way, but note it is needed to synchronize access.
+	For  better  work,  YAMN  offers  you  some  services  and exports functions. Description of
+	exported functions is in its declartation; for accounts functions see account.cpp, for mails
+	functions see mails/mails.cpp and so on.
+
+
+3.	YAMN thread synchronization
+	---------------------------
+
+	Because  YAMN  is  multithreaded,  more  than one thread can access to any member of account
+	structure.  Therefore  access to these members should be synchronised. YAMN offers two types
+	of   synchronization  objects  (SO):  SCOUNTER  (Synchronized  Counter)  and  SWMRG  (Single
+	Writer/Multiple Readers Guard). To use these objects, you can use exported functions:
+
+	SWMRG: WaitToWriteSO, WaitToWriteSOEx, WriteDoneSO, WaitToReadSO, WaitToReadSOEx, ReadDoneSO
+	SCOUNTER: SCGetNumber, SCInc, SCDec
+
+	To  see  description  for these functions, see m_synchro.h header file and synchro.cpp. Note
+	that  in HACCOUNT structure, there are 3 synchronizing members, which you have to use if you
+	want to access to any member of account structure. All access techniques (writing to members
+	and  read  from members) are used in POP3 protocol plugin. Now, it is important what we have
+	to  do  when  we  want  to make our plugin be synchronized with YAMN (in POP3 protocol it is
+	described too).
+
+	1. We have to use ThreadRunningEV event when YAMN calls our checking/deleting function. This
+	parameter  is to stop YAMN called thread until we do not have copied datas from stack. After
+	that, we SetEvent(ThreadRunningEvent) to unblock YAMN to continue in its work.
+
+	2.  We  have  to  use  UsingThreads account's member. This is only for YAMN account deleting
+	prevention. We use this counter to set number of threads using account. If no thread is just
+	using  account,  account  is  signaled, that it can be deleted (and is deleted when needed).
+	This leads us to do some things: We use SCInc(UsingThreads) as the first thing we can do. We
+	cannot  omit,  that called thread finished before we call this function. UsingThreads should
+	have  "continuous"  value  greater than zero when using account. E.g. if YAMN creates thread
+	for  plugin  that  checks account for new mail, YAMN waits until we set ThreadRunningEV (see
+	point  1).  After  setting  this  event  to  signal,  that YAMN can continue in its work, we
+	increase  SCInc(UsingThreads),  so  we  ensure  that another thread uses account before YAMN
+	thread,  that uses this account ends. And SCDec(UsingThreads) should be the last thing we do
+	in  our  thread.  If  we  run another thread in our thread, we should wait until it does not
+	SCInc(UsingThreads)  and after that we should continue (just like YAMN creates and calls our
+	thread).
+
+	3.  If  we  use account's SWMRG (AccountAccessSO, MessagesAccessSO), we should test what our
+	function  returned.  Use  the same methods as POP3 protocol does while testing and accessing
+	critical  section. Note that we cannot use WaitToWriteSO(MyAccount->AccountAccessSO), but in
+	easy       way      we      can      WaitToWrite(AccountAccess)      and      for      mails
+	WaitToWriteSO(MyAccount->MessagesAccessSO) use MsgsWaitToWrite(AccountAccess) and so on. See
+	export.h file for these definitions.
+
+	4. Deleting account is quite easy, but in YAMN, it is very problematic operation. If you use
+	MS_YAMN_DELETEACCOUNT service, it is the best way to avoid any problem. These problems raise
+	from the facts desribed in the point 2.
+
+	5. You should use ctritical sections only for short time not to block other threads. You can
+	imagine that users can't browse through mails, because account is blocked by your thread...
+
+	All  needed  infos  in  POP3  internal  protocol  plugin  (see proto/pop3/pop3comm.cpp), are
+	described.
+
+
+4.	What do you need to make your filter plugin cooperating with YAMN
+	-----------------------------------------------------------------
+
+	Filter  plugins  are  very  easy  to write in its own way, it much more easier than protocol
+	plugin.  But  some  things  are  common: you have to register your plugin and insert to YAMN
+	(these  are  2  steps,  see  sources of some filter plugin), You have to import to YAMN your
+	filter function. Filter function can do anything with mails, but the most important is, that
+	it  can set Flags member of mail (see mails/m_mails.h file) to one of YAMN_MSG_SPAMLx.
+	Note  Mail  is  in  write-access,  so  your  plugin  can do anything with mail and avoid the
+	synchronization problem.
+
+	Now YAMN recognizes 4 spam levels:
+	1. Notifies about this mail, but shows it in mailbrowser with other color than normally
+	2. Does not notify about this mail, shows it in mailbrowser with other color than normally
+        3. Deletes mail from server (depends on protocol),  does not notify and shows "this spam was
+        deleted"
+        4. Deletes  mail  from  server  (depends  on  protocol),  does not notify,  does not show in
+        mailbrowser
+
+	Your  plugin  can  set  data for mail in the TranslatedHeader structure, inserting it to the
+	queue.  This  information  is  stored, so it is reloaded after protocol read mails from book
+	file.
diff --git a/plugins/YAMN/docs/YAMN-Readme.txt b/plugins/YAMN/docs/YAMN-Readme.txt
new file mode 100644
index 0000000000..901ad22f73
--- /dev/null
+++ b/plugins/YAMN/docs/YAMN-Readme.txt
@@ -0,0 +1,79 @@
+=========================================================
+= YAMN plugin for Miranda readme                        =
+=========================================================
+Yet Another Mail Notifier
+Checks pop3 accounts for new mail
+
+Advantages:
+- quite small
+- structured in two parts: notifier and protocols
+- unlimited number of accounts
+- international support in Unicode
+- open-source (GNU-GPL)
+POP3:
+- many switches for each account
+- support for MIME standard
+- support for Base64 and Quoted-Printable
+- 100% detection of new mail based on unique message ID
+- multithreaded checking (also with hotkey)
+- deleting mail from server
+- connecting through Miranda proxy
+- secure password authentification
+- SSL support through OpenSSL
+
+WIN9X SUPPORT
+-------------
+Win9x users, use unicows.dll library, download it at:
+http://libunicows.sf.net (whole package)
+or just visit http://www.majvan.host.sk/Projekty/YAMN
+and download zip-ed unicows.dll
+All you need is to copy unicows.dll to Windows system32
+directory (or to Miranda home directory). Use Win9x
+version of YAMN, not WinNT version.
+
+SSL SUPPORT
+-----------
+If you want to use SSL features, you have to download
+OpenSSL libraries on YAMN homepage
+http://www.majvan.host.sk/Projekty/YAMN
+or the latest (stable) version with installer on
+http://www.slproweb.com/products/Win32OpenSSL.html
+Copy *.dll files to Windows system32 directory (or to
+Miranda home directory).
+
+LATEST STABLE
+-------------
+Version of YAMN has following structure: w.x.y.z
+z- only some bug fixed or some changes
+y- some new feature added
+x- big feature added
+w- if this changes, YAMN becomes better than Outlook ;-)
+Latest stable plugin is always present to download from YAMN
+homepage.
+
+BETA
+----
+* YAMN-beta version is intended only for testing purposes.
+* Author waits for stability reports. Sometimes author waits not 
+only for crash reports, but also for success reports (you are 
+informed by message box on startup, if success reports are also 
+needed). This is because he has no resources for testing.
+* Please do not send reports if newer beta version is available.
+* Please do not send reports without describing problem detailed.
+* Beta version produces debug files (yamn-debug.*.log) located 
+in Miranda home directory (like every YAMN debug release). These 
+files are usefull for author to locate the bug (although not 
+100%). After Miranda restart, log files are rewritten. Log files 
+can become very large (more than 10MB). Sometimes they can be 
+cut at the end (contact author).
+IMPORTANT FOR BETA: yamn-debug.comm.log file contains your plain 
+password. You should rewrite it.
+Thank you for comprehension.
+
+=========================================================
+ Do you want some FAQ? Visit HOMEPAGE:
+ http://www.majvan.host.sk/Projekty/YAMN
+ Still don't know answer? Write question to guestbook.
+
+ majvan
+=========================================================
diff --git a/plugins/YAMN/docs/language.pop3.txt b/plugins/YAMN/docs/language.pop3.txt
new file mode 100644
index 0000000000..03fb78ec79
--- /dev/null
+++ b/plugins/YAMN/docs/language.pop3.txt
@@ -0,0 +1,118 @@
+;
+;	YAMN-POP3 0.2.4.7 translation file
+;
+;--------------------------------
+;	NEW in 0.2.4.7
+;--------------------------------
+
+;--------------------------------
+;	CHANGED in 0.2.4.7
+;--------------------------------
+
+;--------------------------------
+;	OLD in 0.2.4.7
+;--------------------------------
+;
+;	Main
+;
+[Found new version of account book, not compatible with this version of YAMN.]
+[Error reading account file. Account file corrupted.]
+[Memory allocation error while data reading]
+[Reading file error. File already in use?]
+[Error while copying data to disk occured. File in use?]
+[YAMN (internal POP3) read error]
+[POP3 plugin- write file error]
+[Error %d-%d-%d-%d:]
+[Memory allocation error.]
+[Account is about to be stopped.]
+[Cannot connect to POP3 server.]
+[Cannot allocate memory for received data.]
+[Cannot login to POP3 server.]
+[Bad user or password.]
+[Server does not support APOP authorization.]
+[Error while executing POP3 command.]
+[Cannot connect to server with NetLib.]
+[Cannot send data.]
+[Cannot receive data.]
+[Cannot allocate memory for received data.]
+[OpenSSL not loaded.]
+[Windows socket 2.0 init failed.]
+[DNS lookup error.]
+[Error while creating base socket.]
+[Error connecting to server with socket.]
+[Error while creating SSL structure.]
+[Error connecting socket with SSL.]
+[Server rejected connection with SSL.]
+[Cannot write SSL data.]
+[Cannot read SSL data.]
+[Cannot allocate memory for received data.]
+
+;
+;	Options
+;
+[Please wait while account is in use.]
+[Please wait while no account is in use.]
+[Time left to next check [s]: %d]
+[Select executable used for notification]
+[Input error]
+[This is not a valid number value]
+[At least one mail notification event must be checked]
+[Please select application to run]
+[Delete]
+[Check this account]
+[Server:]
+[Port:]
+[User:]
+[Password:]
+[APOP auth]
+[Check interval [min]:]
+[Sound notification]
+[Message notification]
+[Tray icon notification]
+[Application execution:]
+[Persistant message]
+[Sound notification if failed]
+[Message notification if failed]
+[Tray icon notification if failed]
+[Default codepage:]
+[Check while:]
+;[Offline]
+;[Online]
+;[Away]
+;[N/A]
+;[Occupied]
+;[DND]
+;[Free for chat]
+;[Invisible]
+;[On the phone]
+;[Out to lunch]
+[Startup check]
+[Default]
+[Reset counter]
+[Account Test]
+[Account Test (failed)]
+[Account Test]
+[You have N new mails]
+[Connection failed message]
+[Popup notification]
+[Popup if no mail]
+[Single popup]
+[Multi popup]
+[Popup notification if failed]
+[Check from menu]
+[New mail notifications]
+[No new mail notifications]
+[Connection failure notifications]
+[Connecting to server]
+[Reading new mails (%d%% done)]
+[Disconnected]
+[Entering POP3 account]
+[Searching for new mail]
+[Deleting requested mails]
+[Deleting spam]
+[Delete account confirmation]
+[Do you really want to delete this account?]
+
+;--------------------------------
+;	REMOVED in 0.2.4.7
+;--------------------------------
\ No newline at end of file
diff --git a/plugins/YAMN/docs/language.txt b/plugins/YAMN/docs/language.txt
new file mode 100644
index 0000000000..72d1fcda8b
--- /dev/null
+++ b/plugins/YAMN/docs/language.txt
@@ -0,0 +1,75 @@
+;
+;	YAMN 0.2.4.7 translation file
+;
+;--------------------------------
+;	NEW in 0.2.4.7
+;--------------------------------
+
+;--------------------------------
+;	CHANGED in 0.2.4.7
+;--------------------------------
+
+;--------------------------------
+;	OLD in 0.2.4.7
+;--------------------------------
+;
+;	Main
+;
+[YAMN: new mail]
+[YAMN: connect failed]
+[No new mail, %d spam(s)]
+[No new mail]
+[YAMN uninstalling]
+[Do you also want to remove native YAMN plugins settings?]
+
+;
+;	Menu
+;
+[Check &mail (YAMN)]
+[Check mail]			;for TopToolBar plugin
+
+;
+;	Options
+;
+[Hotkey for mail check:]
+[TopToolBar button "Check mail"]
+[Installed plugins]
+[Version:]
+[Description:]
+[Copyright:]
+[Contact:]
+[WWW:]
+
+;
+;	Mail browser
+;
+[%s - %d new mails, %d total]
+[ - new mail(s)]
+[From]
+[Subject]
+[Size]
+[Run application]
+[Delete selected]
+[Delete confirmation]
+[Do you really want to delete %d selected mails?]
+
+;
+;	Bad connection dialog
+;
+[ - connection error]
+[Cannot allocate memory for received data]
+[Bad user name or error while logging]
+[Bad user or password or error while logging]
+[Cannot get number of messages]
+[Cannot resolve message signatures]
+[Cannot get sizes of messages]
+[Cannot find server]
+[Cannot connect to server]
+[System error occured]
+[Cannot send data]
+[Cannot receive data]
+[Unknown error]
+
+;--------------------------------
+;	REMOVED in 0.2.4.7
+;--------------------------------
\ No newline at end of file
diff --git a/plugins/YAMN/filter/Base/AggressiveOptimize.h b/plugins/YAMN/filter/Base/AggressiveOptimize.h
new file mode 100644
index 0000000000..1bf0e19c2c
--- /dev/null
+++ b/plugins/YAMN/filter/Base/AggressiveOptimize.h
@@ -0,0 +1,168 @@
+
+//////////////////////////////
+// Version 1.40 
+// October 22nd, 2002 - .NET (VC7, _MSC_VER=1300) support!
+// Version 1.30
+// Nov 24th, 2000
+// Version 1.20
+// Jun 9th, 2000
+// Version 1.10
+// Jan 23rd, 2000
+// Version 1.00
+// May 20th, 1999
+// Todd C. Wilson, Fresh Ground Software
+// (todd@nopcode.com)
+// This header file will kick in settings for Visual C++ 5 and 6 that will (usually)
+// result in smaller exe's.
+// The "trick" is to tell the compiler to not pad out the function calls; this is done
+// by not using the /O1 or /O2 option - if you do, you implicitly use /Gy, which pads
+// out each and every function call. In one single 500k dll, I managed to cut out 120k
+// by this alone!
+// The other two "tricks" are telling the Linker to merge all data-type segments together
+// in the exe file. The relocation, read-only (constants) data, and code section (.text)
+// sections can almost always be merged. Each section merged can save 4k in exe space,
+// since each section is padded out to 4k chunks. This is very noticeable with smaller
+// exes, since you could have only 700 bytes of data, 300 bytes of code, 94 bytes of
+// strings - padded out, this could be 12k of runtime, for 1094 bytes of stuff! For larger
+// programs, this is less overall, but can save at least 4k.
+// Note that if you're using MFC static or some other 3rd party libs, you may get poor
+// results with merging the readonly (.rdata) section - the exe may grow larger.
+// To use this feature, define _MERGE_DATA_ in your project or before this header is used.
+// With Visual C++ 5, the program uses a file alignment of 512 bytes, which results
+// in a small exe. Under VC6, the program instead uses 4k, which is the same as the
+// section size. The reason (from what I understand) is that 4k is the chunk size of
+// the virtual memory manager, and that WinAlign (an end-user tuning tool for Win98)
+// will re-align the programs on this boundary. The problem with this is that all of
+// Microsoft's system exes and dlls are *NOT* tuned like this, and using 4k causes serious
+// exe bloat. This is very noticeable for smaller programs.
+// The "trick" for this is to use the undocumented FILEALIGN linker parm to change the
+// padding from 4k to 1/2k, which results in a much smaller exe - anywhere from 20%-75%
+// depending on the size. Note that this is the same as using /OPT:NOWIN98, which *is*
+// a previously documented switch, but was left out of the docs for some reason in VC6 and
+// all of the current MSDN's - see KB:Q235956 for more information.
+// Microsoft does say that using the 4k alignment will "speed up process loading",
+// but I've been unable to notice a difference, even on my P180, with a very large (4meg) exe.
+// Please note, however, that this will probably not change the size of the COMPRESSED
+// file (either in a .zip file or in an install archive), since this 4k is all zeroes and
+// gets compressed away.
+// Also, the /ALIGN:4096 switch will "magically" do the same thing, even though this is the
+// default setting for this switch. Apparently this sets the same values as the above two
+// switches do. We do not use this in this header, since it smacks of a bug and not a feature.
+// Thanks to Michael Geary <Mike@Geary.com> for some additional tips!
+//
+// Notes about using this header in .NET
+// First off, VC7 does not allow a lot of the linker command options in pragma's. There is no
+// honest or good reason why Microsoft decided to make this change, it just doesn't.
+// So that is why there are a lot of <1300 #if's in the header.
+// If you want to take full advantage of the VC7 linker options, you will need to do it on a 
+// PER PROJECT BASIS; you can no longer use a global header file like this to make it better.
+// Items I strongly suggest putting in all your VC7 project linker options command line settings:
+//			/ignore:4078	/RELEASE
+// Compiler options:
+//			/GL (Whole Program Optimization)
+// If you're making an .EXE and not a .DLL, consider adding in:
+//			/GA (Optimize for Windows Application)
+// Some items to consider using in your VC7 projects (not VC6):
+// Link-time Code Generation - whole code optimization. Put this in your exe/dll project link settings.
+//			/LTCG:NOSTATUS
+// The classic no-padding and no-bloat compiler C/C++ switch:
+//			/opt:nowin98
+//
+// (C++ command line options:  /GL /opt:nowin98  and /GA for .exe files)
+// (Link command line options: /ignore:4078 /RELEASE /LTCG:NOSTATUS)
+//
+// Now, notes on using these options in VC7 vs VC6.
+// VC6 consistently, for me, produces smaller code from C++ the exact same sources,
+// with or without this header. On average, VC6 produces 5% smaller binaries compared
+// to VC7 compiling the exact same project, *without* this header. With this header, VC6
+// will make a 13k file, while VC7 will make a 64k one. VC7 is just bloaty, pure and
+// simple - all that managed/unmanaged C++ runtimes, and the CLR stuff must be getting
+// in the way of code generation. However, template support is better, so there.
+// Both VC6 and VC7 show the same end kind of end result savings - larger binary output
+// will shave about 2% off, where as smaller projects (support DLL's, cpl's,
+// activex controls, ATL libs, etc) get the best result, since the padding is usually
+// more than the actual usable code. But again, VC7 does not compile down as small as VC6.
+//
+// The argument can be made that doing this is a waste of time, since the "zero bytes"
+// will be compressed out in a zip file or install archive. Not really - it doesn't matter
+// if the data is a string of zeroes or ones or 85858585 - it will still take room (20 bytes
+// in a zip file, 29 bytes if only *4* of them 4k bytes are not the same) and time to
+// compress that data and decompress it. Also, 20k of zeros is NOT 20k on disk - it's the
+// size of the cluster slop- for Fat32 systems, 20k can be 32k, NTFS could make it 24k if you're
+// just 1 byte over (round up). Most end users do not have the dual P4 Xeon systems with
+// two gigs of RDram and a Raid 0+1 of Western Digital 120meg Special Editions that all
+// worthy developers have (all six of us), so they will need any space and LOADING TIME
+// savings they will need; taking an extra 32k or more out of your end user's 64megs of
+// ram on Windows 98 is Not a Good Thing.
+//
+// Now, as a ADDED BONUS at NO EXTRA COST TO YOU! Under VC6, using the /merge:.text=.data
+// pragma will cause the output file to be un-disassembleable! (is that a word?) At least,
+// with the normal tools - WinDisam, DumpBin, and the like will not work. Try it - use the
+// header, compile release, and then use DUMPBIN /DISASM filename.exe - no code!
+// Thanks to G�zim Pani <gpani@siu.edu> for discovering this gem - for a full writeup on
+// this issue and the ramifactions of it, visit www.nopcode.com for the Aggressive Optimize
+// article.
+
+#ifndef _AGGRESSIVEOPTIMIZE_H_
+#define _AGGRESSIVEOPTIMIZE_H_
+
+#pragma warning(disable:4711)
+
+#ifdef NDEBUG
+// /Og (global optimizations), /Os (favor small code), /Oy (no frame pointers)
+#pragma optimize("gsy",on)
+
+#if (_MSC_VER<1300)
+	#pragma comment(linker,"/RELEASE")
+#endif
+
+/*
+// Note that merging the .rdata section will result in LARGER exe's if you using
+// MFC (esp. static link). If this is desirable, define _MERGE_RDATA_ in your project.
+#ifdef _MERGE_RDATA_
+#pragma comment(linker,"/merge:.rdata=.data")
+#endif // _MERGE_RDATA_
+
+#pragma comment(linker,"/merge:.text=.data")
+#if (_MSC_VER<1300)
+	// In VC7, this causes problems with the relocation and data tables, so best to not merge them
+	#pragma comment(linker,"/merge:.reloc=.data")
+#endif
+*/
+
+// Merging sections with different attributes causes a linker warning, so
+// turn off the warning. From Michael Geary. Undocumented, as usual!
+#if (_MSC_VER<1300)
+	// In VC7, you will need to put this in your project settings
+	#pragma comment(linker,"/ignore:4078")
+#endif
+
+// With Visual C++ 5, you already get the 512-byte alignment, so you will only need
+// it for VC6, and maybe later.
+#if _MSC_VER >= 1000
+
+// Option #1: use /filealign
+// Totally undocumented! And if you set it lower than 512 bytes, the program crashes.
+// Either leave at 0x200 or 0x1000
+//#pragma comment(linker,"/FILEALIGN:0x200")
+
+// Option #2: use /opt:nowin98
+// See KB:Q235956 or the READMEVC.htm in your VC directory for info on this one.
+// This is our currently preferred option, since it is fully documented and unlikely
+// to break in service packs and updates.
+#if (_MSC_VER<1300)
+	// In VC7, you will need to put this in your project settings
+	#pragma comment(linker,"/opt:nowin98")
+#else
+
+// Option #3: use /align:4096
+// A side effect of using the default align value is that it turns on the above switch.
+// Does nothing under Vc7 that /opt:nowin98 doesn't already give you
+// #pragma comment(linker,"/ALIGN:512")
+#endif
+
+#endif // _MSC_VER >= 1000
+
+#endif // NDEBUG
+
+#endif //  _AGGRESSIVEOPTIMIZE_H_
diff --git a/plugins/YAMN/filter/Base/Base.dsp b/plugins/YAMN/filter/Base/Base.dsp
new file mode 100644
index 0000000000..7231712a74
--- /dev/null
+++ b/plugins/YAMN/filter/Base/Base.dsp
@@ -0,0 +1,108 @@
+# Microsoft Developer Studio Project File - Name="Base" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Base - Win32 Release
+!MESSAGE Dies ist kein g�ltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und f�hren Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "Base.mak".
+!MESSAGE 
+!MESSAGE Sie k�nnen beim Ausf�hren von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "Base.mak" CFG="Base - Win32 Release"
+!MESSAGE 
+!MESSAGE F�r die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "Base - Win32 Release" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Base - Win32 Debug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Base - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /G4 /Zp4 /MD /W3 /GX /Zi /O1 /Ob0 /I "../../../../include" /I "../../../../include/msapi" /I "../../../../include_API" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /machine:I386 /out:"../../../../bin/release/plugins/YAMN-filter/Base.dll" /filealign:512
+# ADD LINK32 kernel32.lib user32.lib /nologo /dll /pdb:"../../../../bin/Release/plugins/YAMN/base.pdb" /debug /machine:I386 /out:"../../../../bin/Release/plugins/YAMN/base.dll" /filealign:512
+
+!ELSEIF  "$(CFG)" == "Base - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../../../include" /I "../../../../include/msapi" /I "../../../../include_API" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x417 /d "_DEBUG"
+# ADD RSC /l 0x417 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /out:"../../../../bin/Debug/plugins/YAMN-filter/Base.dll"
+# ADD LINK32 kernel32.lib user32.lib /nologo /dll /pdb:"../../../../bin/Debug/plugins/YAMN/base.pdb" /debug /machine:I386 /out:"../../../../bin/Debug/plugins/YAMN/base.dll" /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Base - Win32 Release"
+# Name "Base - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\debug.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\maindll.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/plugins/YAMN/filter/Base/Base.mak b/plugins/YAMN/filter/Base/Base.mak
new file mode 100644
index 0000000000..75ec59db8a
--- /dev/null
+++ b/plugins/YAMN/filter/Base/Base.mak
@@ -0,0 +1,229 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on Base.dsp
+!IF "$(CFG)" == ""
+CFG=Base - Win32 Release
+!MESSAGE No configuration specified. Defaulting to Base - Win32 Release.
+!ENDIF 
+
+!IF "$(CFG)" != "Base - Win32 Release" && "$(CFG)" != "Base - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "Base.mak" CFG="Base - Win32 Release"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "Base - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Base - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "Base - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "..\..\..\..\bin\release\plugins\YAMN-filter\base.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\maindll.obj"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\base.exp"
+	-@erase "..\..\..\..\bin\release\plugins\YAMN-filter\base.dll"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)\Base.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Base.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\base.pdb" /machine:I386 /out:"../../../../bin/release/plugins/YAMN-filter/base.dll" /implib:"$(OUTDIR)\base.lib" /filealign:512 
+LINK32_OBJS= \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\maindll.obj"
+
+"..\..\..\..\bin\release\plugins\YAMN-filter\base.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "Base - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "..\..\..\..\bin\Debug\plugins\YAMN-filter\Base.dll" "$(OUTDIR)\Base.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\debug.obj"
+	-@erase "$(INTDIR)\debug.sbr"
+	-@erase "$(INTDIR)\maindll.obj"
+	-@erase "$(INTDIR)\maindll.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\Base.bsc"
+	-@erase "$(OUTDIR)\Base.exp"
+	-@erase "$(OUTDIR)\Base.pdb"
+	-@erase "..\..\..\..\bin\Debug\plugins\YAMN-filter\Base.dll"
+	-@erase "..\..\..\..\bin\Debug\plugins\YAMN-filter\Base.ilk"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\Base.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Base.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\debug.sbr" \
+	"$(INTDIR)\maindll.sbr"
+
+"$(OUTDIR)\Base.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\Base.pdb" /debug /machine:I386 /out:"../../../../bin/Debug/plugins/YAMN-filter/Base.dll" /implib:"$(OUTDIR)\Base.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\debug.obj" \
+	"$(INTDIR)\maindll.obj"
+
+"..\..\..\..\bin\Debug\plugins\YAMN-filter\Base.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("Base.dep")
+!INCLUDE "Base.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "Base.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "Base - Win32 Release" || "$(CFG)" == "Base - Win32 Debug"
+SOURCE=.\debug.cpp
+
+!IF  "$(CFG)" == "Base - Win32 Release"
+
+
+"$(INTDIR)\debug.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "Base - Win32 Debug"
+
+
+"$(INTDIR)\debug.obj"	"$(INTDIR)\debug.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+SOURCE=.\maindll.cpp
+
+!IF  "$(CFG)" == "Base - Win32 Release"
+
+
+"$(INTDIR)\maindll.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "Base - Win32 Debug"
+
+
+"$(INTDIR)\maindll.obj"	"$(INTDIR)\maindll.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+
+!ENDIF 
+
diff --git a/plugins/YAMN/filter/Base/debug.cpp b/plugins/YAMN/filter/Base/debug.cpp
new file mode 100644
index 0000000000..654ece7b57
--- /dev/null
+++ b/plugins/YAMN/filter/Base/debug.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copied from YAMN plugin
+ *
+ * (c) majvan 2002-2004
+ */
+#ifdef DEBUG_FILTER
+
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+TCHAR DebugUserDirectory[MAX_PATH]=".";
+LPCRITICAL_SECTION FileAccessCS;
+
+void DebugLog(HANDLE File,const char *fmt,...);
+
+#ifdef DEBUG_FILTER
+TCHAR DebugFilterFileName2[]=_T("%s\\yamn-debug.basefilter.log");
+HANDLE FilterFile=INVALID_HANDLE_VALUE;
+#endif
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+void InitDebug()
+{
+	TCHAR DebugFileName[MAX_PATH];
+
+	if(FileAccessCS==NULL)
+	{
+		FileAccessCS=new CRITICAL_SECTION;
+		InitializeCriticalSection(FileAccessCS);
+	}
+
+	_stprintf(DebugFileName,DebugFilterFileName2,DebugUserDirectory);
+
+	FilterFile=CreateFile(DebugFileName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
+
+	DebugLog(FilterFile,"Base filter plugin for YAMN - debug file\n");
+}
+
+void UnInitDebug()
+{
+	DebugLog(FilterFile,"File is being closed normally.");
+	CloseHandle(FilterFile);
+}
+
+void DebugLog(HANDLE File,const char *fmt,...)
+{
+	char *str;
+	char tids[32];
+	va_list vararg;
+	int strsize;
+	DWORD Written;
+
+	va_start(vararg,fmt);
+	str=(char *)malloc(strsize=65536);
+	_stprintf(tids,_T("[%x]"),GetCurrentThreadId());
+	while(_vsnprintf(str,strsize,fmt,vararg)==-1)
+		str=(char *)realloc(str,strsize+=65536);
+	va_end(vararg);
+	EnterCriticalSection(FileAccessCS);
+	WriteFile(File,tids,(DWORD)strlen(tids),&Written,NULL);
+	WriteFile(File,str,(DWORD)strlen(str),&Written,NULL);
+	LeaveCriticalSection(FileAccessCS);
+	free(str);
+}
+
+#endif	//ifdef DEBUG
\ No newline at end of file
diff --git a/plugins/YAMN/filter/Base/docs/base-readme.txt b/plugins/YAMN/filter/Base/docs/base-readme.txt
new file mode 100644
index 0000000000..2e79bbbdd8
--- /dev/null
+++ b/plugins/YAMN/filter/Base/docs/base-readme.txt
@@ -0,0 +1,63 @@
+========================
+= Base Filter for YAMN =
+========================
+
+Q: What???
+A: YAMN filter to classify incoming email.
+
+Q: How?
+A: Finding occurency of defiend MIME header item and its value from blacklist file.
+
+Q: Blacklist file?
+A: Yes. It is created by yourself and located in Miranda directory with name 'basefilterdeny.txt'
+
+Q: Created by myself?
+A: Just create the file and write there your header MIME items and its values.
+
+Q: What do you mean "header MIME items" and "its values"?
+A: Every mail has header consisting of MIME items like "Subject" or "Return-Path".
+
+Q: So I need to understand how the header looks like...
+A: Yes, if you want to use this filter, you should. Header MIME is defined in RFC822 standard.
+
+Q: Ok, I've just studied it. So how to set filter (write some rules to the blacklist file)?
+A: Each line is one rule: write the exact item, press <tab>, press the substring of value needed to be found, press <tab>, define spamlevel and then press <Enter>.
+
+Q: Spamlevel?
+A: Yes.
+   0=do not notify
+   1=notify, display with another color in mailbrowser
+   2=do not notify, display with another color in mailbrowser
+   3=delete, display in mailbrowser about deleted mail
+   4=delete, do not display (mail's quick death, hehe)
+
+Q: So the rule has 3 parameters, that's it?
+A: Yes. This is the example:
+<------ start of file ------>
+From	CrazyMail	1
+X-Importance	low	0
+Subject	LinuxMailList	0
+Return-Path	cheapsoftware@junkmails.net	2
+X-TextClassification	spam	3
+<------ end of file ------->
+
+Q: Wait while. Ok, but it does not work.
+A: Check if you have this plugin listed in Miranda/Options/Plugins/YAMN item
+
+Q: No, it is not listed in YAMN plugins.
+A: Then check if the dll residents in Plugins/YAMN direcotry.
+
+Q: This directory does not exists.
+A: Create it and put the dll there. Restart Miranda.
+
+Q: Hmmm, ok. But it is not still listed.
+A: Your version of YAMN and filter does not match.
+
+Q: And?
+A: Try to look to http://www.majvan.host.sk/Projekty/YAMN for updates.
+
+Q: Now, it is listed, but does not work anyway.
+A: Try to download debug version from YAMN homepage, if you are not using it (the name of filter must contain the word "debug")
+
+Q: What does debug version do?
+A: It creates debug log file in Miranda home directory where you can browse how does filter mark mails.
\ No newline at end of file
diff --git a/plugins/YAMN/filter/Base/maindll.cpp b/plugins/YAMN/filter/Base/maindll.cpp
new file mode 100644
index 0000000000..6affd00372
--- /dev/null
+++ b/plugins/YAMN/filter/Base/maindll.cpp
@@ -0,0 +1,238 @@
+//---------------------------------------------------------------------------
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <newpluginapi.h>
+#include <m_system.h>
+#include <m_langpack.h>
+#include <m_options.h>
+#include "../../m_filterplugin.h"
+#if !defined(_WIN64)
+	#include "aggressiveoptimize.h"
+#endif
+
+typedef INT_PTR(* MIRANDASERVICE)(WPARAM,LPARAM);
+
+DWORD WINAPI FilterMail(HACCOUNT Account,DWORD AccountVer,HYAMNMAIL Mail,DWORD MailVer);//Function marks mail as spam when it is spam...
+DWORD WINAPI UnLoadFilter(LPVOID);
+
+int LoadRules();	//Load rules from file
+int findsubstr(char *original,char *pattern); //finds if original contains substring
+
+YAMN_FILTERIMPORTFCN FilterFunctions=	//we set for YAMN which is our filter function
+{
+	FilterMail,
+	UnLoadFilter,
+};
+
+struct cFilterTable
+{
+	char account[256];
+	char name[256];
+	char value[256];
+	unsigned char sl;
+} *ft=NULL;
+int fts=0;
+
+YAMN_FILTERREGISTRATION FilterRegistration=		//classical YAMN registration
+{
+#ifdef DEBUG_FILTER
+	"Base filter plugin for YAMN (debug)",
+#else
+	"Base filter plugin for YAMN",
+#endif
+	__DATE__,
+	"� majvan",
+	"Classifies mails using the rules stored in file",
+	"om3tn@psg.sk",
+	"http://www.majvan.host.sk/Projekty/YAMN?fm=soft",
+};
+
+char *FilterPath=NULL;
+
+struct YAMNExportedFcn
+{
+	YAMN_SETFILTERPLUGINFCNIMPORTFCN	SetFilterPluginFcnImportFcn;
+	MIRANDASERVICE RegisterFilterPlugin;
+} YAMNFcn,*pYAMNFcn;			//exported functions from YAMN we will use
+
+HYAMNFILTERPLUGIN POPFilePlugin;	//handle of this plugin for YAMN
+HINSTANCE hInst;		//handle of this DLL for Windows
+
+#ifdef DEBUG_FILTER
+extern void InitDebug();
+extern void UnInitDebug();
+extern void DebugLog(HANDLE File,const char *fmt,...);
+extern HANDLE FilterFile;
+#endif
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
+{
+	hInst=hinstDLL;
+	return true;
+}
+
+extern "C" int __declspec(dllexport) LoadFilter(MIRANDASERVICE GetYAMNFcnPtr)
+{
+	FilterPath=new char[MAX_PATH];
+	char *delim;
+	pYAMNFcn=&YAMNFcn;
+
+	GetModuleFileName(GetModuleHandle(NULL),FilterPath,MAX_PATH);
+	if(NULL!=(delim=strrchr(FilterPath,'\\')))
+		*delim=0;
+	lstrcat(FilterPath,"\\basefilterdeny.txt");
+#ifdef DEBUG_FILTER
+	InitDebug();
+#endif
+
+	if(!LoadRules())
+		return 0;
+
+	pYAMNFcn->RegisterFilterPlugin=(MIRANDASERVICE)GetYAMNFcnPtr((WPARAM)MS_YAMN_REGISTERFILTERPLUGIN,(LPARAM)0);
+	pYAMNFcn->SetFilterPluginFcnImportFcn=(YAMN_SETFILTERPLUGINFCNIMPORTFCN)GetYAMNFcnPtr((WPARAM)YAMN_SETFILTERPLUGINFCNIMPORTID,(LPARAM)0);
+//Register our filter plugin to YAMN
+	if(NULL==(POPFilePlugin=(HYAMNFILTERPLUGIN)pYAMNFcn->RegisterFilterPlugin((WPARAM)&FilterRegistration,(LPARAM)YAMN_FILTERREGISTRATIONVERSION)))
+		return 0;
+//And add our imported functions for YAMN
+	if(!pYAMNFcn->SetFilterPluginFcnImportFcn(POPFilePlugin,0xb0000000,&FilterFunctions,YAMN_FILTERIMPORTFCNVERSION))
+		return 0;
+	return 1;		//Load luccess
+}
+
+DWORD WINAPI UnLoadFilter(LPVOID)
+{
+#ifdef DEBUG_FILTER
+	UnInitDebug();
+#endif
+	if(FilterPath!=NULL)
+		delete[] FilterPath;
+	FilterPath=NULL;
+
+	return 0;
+}
+
+extern "C" int __declspec(dllexport) UninstallFilter()
+{
+	if(FilterPath==NULL)
+		MessageBox(NULL,"Cannot delete blacklist file when Base Filter is not loaded. Please do it manually.","Base Filter uninstalling",MB_OK|MB_ICONWARNING);
+	else
+		DeleteFile(FilterPath);
+	return 0;
+}
+
+
+//And this is main filter function.
+DWORD WINAPI FilterMail(HACCOUNT Account,DWORD AccountVer,HYAMNMAIL Mail,DWORD MailVer)
+{
+	struct CMimeItem *Browser;
+
+	if(MailVer!=YAMN_MAILVERSION)	//we test if we work with the right YAMNMAIL
+		return 0;
+	if(Mail->MailData==NULL)		//MailData should be available
+		return 0;
+
+#ifdef DEBUG_FILTER
+	DebugLog(FilterFile,"<New mail>\n");
+#endif
+	if(!(Mail->Flags & YAMN_MSG_VIRTUAL))
+		for(Browser=Mail->MailData->TranslatedHeader;Browser!=NULL;Browser=Browser->Next)	//we browse all header stored in Mail->TranslatedHeader
+		{
+#ifdef DEBUG_FILTER
+			DebugLog(FilterFile,"<Testing header item %s: %s>\n",Browser->name,Browser->value);
+#endif
+			for(int i=0;i<fts;i++)
+				if(!lstrcmpi(Browser->name,ft[i].name))
+				{
+#ifdef DEBUG_FILTER
+					DebugLog(FilterFile,"\t\t<Found appropriate selector %s>\n",Browser->name);
+#endif
+					if(findsubstr(Browser->value,ft[i].value))		//and if we find
+					{
+						if((ft[i].sl==0) && ((Mail->Flags & YAMN_MSG_SPAMMASK)==0))
+						{
+							Mail->Flags&=~(YAMN_MSG_POPUP | YAMN_MSG_SYSTRAY | YAMN_MSG_BROWSER | YAMN_MSG_SOUND | YAMN_MSG_APP | YAMN_MSG_NEVENT);
+#ifdef DEBUG_FILTER
+							DebugLog(FilterFile,"\t\tSetting individual flags not to notify mail, but does not consider as spam.");
+#endif
+						}
+						else if((Mail->Flags & YAMN_MSG_SPAMMASK) < ft[i].sl)			//if some filter plugin set higher level of spam, we do nothing
+						{
+							Mail->Flags=(Mail->Flags & ~YAMN_MSG_SPAMMASK)+ft[i].sl;	//else we set spam level 2 (clearing spam bits and then settting them to level 2
+#ifdef DEBUG_FILTER
+							DebugLog(FilterFile,"\t\tMail marked to be spam #%d\n",Mail->Flags & YAMN_MSG_SPAMMASK);
+#endif
+						}
+					}
+#ifdef DEBUG_FILTER
+					DebugLog(FilterFile,"\t\t</Found appropriate selector>\n");
+#endif
+				}
+#ifdef DEBUG_FILTER
+			DebugLog(FilterFile,"</Testing header>\n");
+#endif
+		}
+#ifdef DEBUG_FILTER
+	DebugLog(FilterFile,"</New mail>\n\n");
+#endif
+	return 1;
+}
+
+int LoadRules()
+{
+	char *account=NULL;
+	char name[256];
+	char value[256];
+	char BadCompiler[512+5];
+	unsigned char sl;
+	FILE *fp;
+
+#ifdef DEBUG_FILTER
+	DebugLog(FilterFile,"<Loading rules from file %s>\n",FilterPath);
+#endif
+
+	fp=fopen(FilterPath,"rt");
+	if(fp==NULL)
+		return 0;
+
+	while(!feof(fp))
+	{
+		if(fscanf(fp,"%255s",name) && !feof(fp) && (name[0]!=0))
+		{
+			if(fscanf(fp,"%255s",value) && !feof(fp) && (value[0]!=0))
+			{
+				if(fscanf(fp,"%d",&sl))
+				{
+					fts++;
+					ft=(struct cFilterTable *)realloc((void *)ft,sizeof(cFilterTable)*fts);
+					lstrcpy(ft[fts-1].name,name);
+					lstrcpy(ft[fts-1].value,value);
+					ft[fts-1].sl=sl;
+
+					sprintf(BadCompiler,"%s %s %d",name,value,sl);
+#ifdef DEBUG_FILTER
+					DebugLog(FilterFile,"\t<Rule><selector>%s</selector><value>%s</value><spamlevel>%d</spamlevel>\n",name,value,sl);
+#endif
+				}
+			}
+		}
+	}
+
+	fclose(fp);
+#ifdef DEBUG_FILTER
+	DebugLog(FilterFile,"</Loading rules>\n");
+#endif
+	return 1;
+}
+
+int findsubstr(char *original,char *pattern)
+{
+	int ol=lstrlen(original);
+	int pl=lstrlen(pattern);
+
+	for(int i=0;(i+pl)<=ol;i++)
+		if(!_strnicmp(original+i,pattern,pl))
+			return 1;
+	return 0;
+}
\ No newline at end of file
diff --git a/plugins/YAMN/filter/Simple/AggressiveOptimize.h b/plugins/YAMN/filter/Simple/AggressiveOptimize.h
new file mode 100644
index 0000000000..1bf0e19c2c
--- /dev/null
+++ b/plugins/YAMN/filter/Simple/AggressiveOptimize.h
@@ -0,0 +1,168 @@
+
+//////////////////////////////
+// Version 1.40 
+// October 22nd, 2002 - .NET (VC7, _MSC_VER=1300) support!
+// Version 1.30
+// Nov 24th, 2000
+// Version 1.20
+// Jun 9th, 2000
+// Version 1.10
+// Jan 23rd, 2000
+// Version 1.00
+// May 20th, 1999
+// Todd C. Wilson, Fresh Ground Software
+// (todd@nopcode.com)
+// This header file will kick in settings for Visual C++ 5 and 6 that will (usually)
+// result in smaller exe's.
+// The "trick" is to tell the compiler to not pad out the function calls; this is done
+// by not using the /O1 or /O2 option - if you do, you implicitly use /Gy, which pads
+// out each and every function call. In one single 500k dll, I managed to cut out 120k
+// by this alone!
+// The other two "tricks" are telling the Linker to merge all data-type segments together
+// in the exe file. The relocation, read-only (constants) data, and code section (.text)
+// sections can almost always be merged. Each section merged can save 4k in exe space,
+// since each section is padded out to 4k chunks. This is very noticeable with smaller
+// exes, since you could have only 700 bytes of data, 300 bytes of code, 94 bytes of
+// strings - padded out, this could be 12k of runtime, for 1094 bytes of stuff! For larger
+// programs, this is less overall, but can save at least 4k.
+// Note that if you're using MFC static or some other 3rd party libs, you may get poor
+// results with merging the readonly (.rdata) section - the exe may grow larger.
+// To use this feature, define _MERGE_DATA_ in your project or before this header is used.
+// With Visual C++ 5, the program uses a file alignment of 512 bytes, which results
+// in a small exe. Under VC6, the program instead uses 4k, which is the same as the
+// section size. The reason (from what I understand) is that 4k is the chunk size of
+// the virtual memory manager, and that WinAlign (an end-user tuning tool for Win98)
+// will re-align the programs on this boundary. The problem with this is that all of
+// Microsoft's system exes and dlls are *NOT* tuned like this, and using 4k causes serious
+// exe bloat. This is very noticeable for smaller programs.
+// The "trick" for this is to use the undocumented FILEALIGN linker parm to change the
+// padding from 4k to 1/2k, which results in a much smaller exe - anywhere from 20%-75%
+// depending on the size. Note that this is the same as using /OPT:NOWIN98, which *is*
+// a previously documented switch, but was left out of the docs for some reason in VC6 and
+// all of the current MSDN's - see KB:Q235956 for more information.
+// Microsoft does say that using the 4k alignment will "speed up process loading",
+// but I've been unable to notice a difference, even on my P180, with a very large (4meg) exe.
+// Please note, however, that this will probably not change the size of the COMPRESSED
+// file (either in a .zip file or in an install archive), since this 4k is all zeroes and
+// gets compressed away.
+// Also, the /ALIGN:4096 switch will "magically" do the same thing, even though this is the
+// default setting for this switch. Apparently this sets the same values as the above two
+// switches do. We do not use this in this header, since it smacks of a bug and not a feature.
+// Thanks to Michael Geary <Mike@Geary.com> for some additional tips!
+//
+// Notes about using this header in .NET
+// First off, VC7 does not allow a lot of the linker command options in pragma's. There is no
+// honest or good reason why Microsoft decided to make this change, it just doesn't.
+// So that is why there are a lot of <1300 #if's in the header.
+// If you want to take full advantage of the VC7 linker options, you will need to do it on a 
+// PER PROJECT BASIS; you can no longer use a global header file like this to make it better.
+// Items I strongly suggest putting in all your VC7 project linker options command line settings:
+//			/ignore:4078	/RELEASE
+// Compiler options:
+//			/GL (Whole Program Optimization)
+// If you're making an .EXE and not a .DLL, consider adding in:
+//			/GA (Optimize for Windows Application)
+// Some items to consider using in your VC7 projects (not VC6):
+// Link-time Code Generation - whole code optimization. Put this in your exe/dll project link settings.
+//			/LTCG:NOSTATUS
+// The classic no-padding and no-bloat compiler C/C++ switch:
+//			/opt:nowin98
+//
+// (C++ command line options:  /GL /opt:nowin98  and /GA for .exe files)
+// (Link command line options: /ignore:4078 /RELEASE /LTCG:NOSTATUS)
+//
+// Now, notes on using these options in VC7 vs VC6.
+// VC6 consistently, for me, produces smaller code from C++ the exact same sources,
+// with or without this header. On average, VC6 produces 5% smaller binaries compared
+// to VC7 compiling the exact same project, *without* this header. With this header, VC6
+// will make a 13k file, while VC7 will make a 64k one. VC7 is just bloaty, pure and
+// simple - all that managed/unmanaged C++ runtimes, and the CLR stuff must be getting
+// in the way of code generation. However, template support is better, so there.
+// Both VC6 and VC7 show the same end kind of end result savings - larger binary output
+// will shave about 2% off, where as smaller projects (support DLL's, cpl's,
+// activex controls, ATL libs, etc) get the best result, since the padding is usually
+// more than the actual usable code. But again, VC7 does not compile down as small as VC6.
+//
+// The argument can be made that doing this is a waste of time, since the "zero bytes"
+// will be compressed out in a zip file or install archive. Not really - it doesn't matter
+// if the data is a string of zeroes or ones or 85858585 - it will still take room (20 bytes
+// in a zip file, 29 bytes if only *4* of them 4k bytes are not the same) and time to
+// compress that data and decompress it. Also, 20k of zeros is NOT 20k on disk - it's the
+// size of the cluster slop- for Fat32 systems, 20k can be 32k, NTFS could make it 24k if you're
+// just 1 byte over (round up). Most end users do not have the dual P4 Xeon systems with
+// two gigs of RDram and a Raid 0+1 of Western Digital 120meg Special Editions that all
+// worthy developers have (all six of us), so they will need any space and LOADING TIME
+// savings they will need; taking an extra 32k or more out of your end user's 64megs of
+// ram on Windows 98 is Not a Good Thing.
+//
+// Now, as a ADDED BONUS at NO EXTRA COST TO YOU! Under VC6, using the /merge:.text=.data
+// pragma will cause the output file to be un-disassembleable! (is that a word?) At least,
+// with the normal tools - WinDisam, DumpBin, and the like will not work. Try it - use the
+// header, compile release, and then use DUMPBIN /DISASM filename.exe - no code!
+// Thanks to G�zim Pani <gpani@siu.edu> for discovering this gem - for a full writeup on
+// this issue and the ramifactions of it, visit www.nopcode.com for the Aggressive Optimize
+// article.
+
+#ifndef _AGGRESSIVEOPTIMIZE_H_
+#define _AGGRESSIVEOPTIMIZE_H_
+
+#pragma warning(disable:4711)
+
+#ifdef NDEBUG
+// /Og (global optimizations), /Os (favor small code), /Oy (no frame pointers)
+#pragma optimize("gsy",on)
+
+#if (_MSC_VER<1300)
+	#pragma comment(linker,"/RELEASE")
+#endif
+
+/*
+// Note that merging the .rdata section will result in LARGER exe's if you using
+// MFC (esp. static link). If this is desirable, define _MERGE_RDATA_ in your project.
+#ifdef _MERGE_RDATA_
+#pragma comment(linker,"/merge:.rdata=.data")
+#endif // _MERGE_RDATA_
+
+#pragma comment(linker,"/merge:.text=.data")
+#if (_MSC_VER<1300)
+	// In VC7, this causes problems with the relocation and data tables, so best to not merge them
+	#pragma comment(linker,"/merge:.reloc=.data")
+#endif
+*/
+
+// Merging sections with different attributes causes a linker warning, so
+// turn off the warning. From Michael Geary. Undocumented, as usual!
+#if (_MSC_VER<1300)
+	// In VC7, you will need to put this in your project settings
+	#pragma comment(linker,"/ignore:4078")
+#endif
+
+// With Visual C++ 5, you already get the 512-byte alignment, so you will only need
+// it for VC6, and maybe later.
+#if _MSC_VER >= 1000
+
+// Option #1: use /filealign
+// Totally undocumented! And if you set it lower than 512 bytes, the program crashes.
+// Either leave at 0x200 or 0x1000
+//#pragma comment(linker,"/FILEALIGN:0x200")
+
+// Option #2: use /opt:nowin98
+// See KB:Q235956 or the READMEVC.htm in your VC directory for info on this one.
+// This is our currently preferred option, since it is fully documented and unlikely
+// to break in service packs and updates.
+#if (_MSC_VER<1300)
+	// In VC7, you will need to put this in your project settings
+	#pragma comment(linker,"/opt:nowin98")
+#else
+
+// Option #3: use /align:4096
+// A side effect of using the default align value is that it turns on the above switch.
+// Does nothing under Vc7 that /opt:nowin98 doesn't already give you
+// #pragma comment(linker,"/ALIGN:512")
+#endif
+
+#endif // _MSC_VER >= 1000
+
+#endif // NDEBUG
+
+#endif //  _AGGRESSIVEOPTIMIZE_H_
diff --git a/plugins/YAMN/filter/Simple/docs/simple-readme.txt b/plugins/YAMN/filter/Simple/docs/simple-readme.txt
new file mode 100644
index 0000000000..34c0842c87
--- /dev/null
+++ b/plugins/YAMN/filter/Simple/docs/simple-readme.txt
@@ -0,0 +1,51 @@
+==========================
+= Simple Filter for YAMN =
+==========================
+
+Q: What???
+A: YAMN filter to classify incoming email.
+
+Q: How?
+A: Regarding what the email is from and finding it in the blacklist email file.
+
+Q: Blacklist email file?
+A: Yes. It is created by yourself and located in Miranda directory with name 'simplefilterdeny.txt'
+
+Q: Created by myself?
+A: Just create the file and write there your blacklist mails in every line.
+
+Q: That's all?
+A: Yes and no. You can specify spamlevel for each mail.
+
+Q: Spamlevel?
+A: Yes.
+   1=notify, display with another color in mailbrowser
+   2=do not notify, display with another color in mailbrowser
+   3=delete, display in mailbrowser about deleted mail
+   4=delete, do not display (mail's quick death, hehe)
+
+Q: How to specify it?
+A: After email press <tab> and write number 1-4. Note this is optional. If not defined, level 2 is default.
+
+Q: Ok, that's easy.
+A: Yes, this is the example:
+<------ start of file ------>
+nigeria@spamserver.com	2
+cheapsoftware@junkmails.net	3
+learnenglish@commercial.org
+<------ end of file ------->
+
+Q: Wait while. Ok, but it does not work.
+A: Check if you have this plugin listed in Miranda/Options/Plugins/YAMN item as YAMN plugin.
+
+Q: No, it is not listed in YAMN plugins.
+A: Then check if the dll residents in Plugins/YAMN direcotry.
+
+Q: This directory does not exists.
+A: Create it and put the dll there. Restart Miranda.
+
+Q: Hmmm, ok. But it is not still listed.
+A: Your version of YAMN and filter does not match.
+
+Q: And?
+A: Try to look to http://www.majvan.host.sk/Projekty/YAMN for updates.
\ No newline at end of file
diff --git a/plugins/YAMN/filter/Simple/maindll.cpp b/plugins/YAMN/filter/Simple/maindll.cpp
new file mode 100644
index 0000000000..77488352b9
--- /dev/null
+++ b/plugins/YAMN/filter/Simple/maindll.cpp
@@ -0,0 +1,132 @@
+//---------------------------------------------------------------------------
+#include <windows.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <newpluginapi.h>
+#include <m_system.h>
+#include <m_langpack.h>
+#include <m_options.h>
+#include "../../m_filterplugin.h"
+#if !defined(_WIN64)
+	#include "aggressiveoptimize.h"
+#endif
+
+typedef INT_PTR(* MIRANDASERVICE)(WPARAM,LPARAM);
+
+DWORD WINAPI FilterMail(HACCOUNT Account,DWORD AccountVer,HYAMNMAIL Mail,DWORD MailVer);//Function marks mail as spam when it is spam...
+DWORD WINAPI UnLoadFilter(LPVOID);
+
+YAMN_FILTERIMPORTFCN FilterFunctions=	//we set for YAMN which is our filter function
+{
+	FilterMail,
+	UnLoadFilter,				//No unloading
+};
+
+YAMN_FILTERREGISTRATION FilterRegistration=		//classical YAMN registration
+{
+	"Simple filter plugin for YAMN",
+	__DATE__,
+	"� porter+ majvan",
+	"Classifies mails using the blacklist emails stored in file",
+	"porterbox@hotmail.com",
+	"http://www.majvan.host.sk/Projekty/YAMN?fm=soft",
+};
+
+char *FilterPath=NULL;
+
+struct YAMNExportedFcn
+{
+	YAMN_SETFILTERPLUGINFCNIMPORTFCN	SetFilterPluginFcnImportFcn;
+	MIRANDASERVICE RegisterFilterPlugin;
+} YAMNFcn,*pYAMNFcn;			//exported functions from YAMN we will use
+
+HYAMNFILTERPLUGIN POPFilePlugin;	//handle of this plugin for YAMN
+HINSTANCE hInst;		//handle of this DLL for Windows
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
+{
+	hInst=hinstDLL;
+	return true;
+}
+
+extern "C" int __declspec(dllexport) LoadFilter(MIRANDASERVICE GetYAMNFcnPtr)
+{
+	FilterPath=new char[MAX_PATH];
+	char *delim;
+	pYAMNFcn=&YAMNFcn;
+
+	GetModuleFileName(GetModuleHandle(NULL),FilterPath,MAX_PATH);
+	if(NULL!=(delim=strrchr(FilterPath,'\\')))
+		*delim=0;
+	lstrcat(FilterPath,"\\simplefilterdeny.txt");
+
+	pYAMNFcn->RegisterFilterPlugin=(MIRANDASERVICE)GetYAMNFcnPtr((WPARAM)MS_YAMN_REGISTERFILTERPLUGIN,(LPARAM)0);
+	pYAMNFcn->SetFilterPluginFcnImportFcn=(YAMN_SETFILTERPLUGINFCNIMPORTFCN)GetYAMNFcnPtr((WPARAM)YAMN_SETFILTERPLUGINFCNIMPORTID,(LPARAM)0);
+//Register our filter plugin to YAMN
+	if(NULL==(POPFilePlugin=(HYAMNFILTERPLUGIN)pYAMNFcn->RegisterFilterPlugin((WPARAM)&FilterRegistration,(LPARAM)YAMN_FILTERREGISTRATIONVERSION)))
+		return 0;
+//And add our imported functions for YAMN
+	if(!pYAMNFcn->SetFilterPluginFcnImportFcn(POPFilePlugin,0xb0000000,&FilterFunctions,YAMN_FILTERIMPORTFCNVERSION))
+		return 0;
+	return 1;		//Load luccess
+}
+
+DWORD WINAPI UnLoadFilter(LPVOID)
+{
+	if(FilterPath!=NULL)
+		delete[] FilterPath;
+	FilterPath=NULL;
+
+	return 0;
+}
+
+extern "C" int __declspec(dllexport) UninstallFilter()
+{
+	if(FilterPath==NULL)
+		MessageBox(NULL,"Cannot delete blacklist file when Simple Filter is not loaded. Please do it manually.","Simple Filter uninstalling",MB_OK|MB_ICONWARNING);
+	else
+		DeleteFile(FilterPath);
+	return 0;
+}
+
+
+//And this is main filter function.
+DWORD WINAPI FilterMail(HACCOUNT Account,DWORD AccountVer,HYAMNMAIL Mail,DWORD MailVer)
+{
+	FILE *fp;
+	char EmailSpam[256];
+	unsigned char spamLevel;
+	struct CMimeItem *Browser;
+
+	if(MailVer!=YAMN_MAILVERSION)	//we test if we work with the right YAMNMAIL
+		return 0;
+	if(Mail->MailData==NULL)		//MailData should be available
+		return 0;
+	fp=fopen(FilterPath,"rt");
+	if(fp != NULL) {
+		if(!(Mail->Flags & YAMN_MSG_VIRTUAL))
+			for(Browser=Mail->MailData->TranslatedHeader;Browser!=NULL;Browser=Browser->Next) {	//we browse all header stored in Mail->TranslatedHeader
+				if((!lstrcmp(Browser->name,"Return-Path")) || (!lstrcmp(Browser->name,"From"))) {		//and if we find 
+					fseek(fp, 0L, SEEK_SET);
+					while(!feof(fp)) {				
+						if(fscanf(fp, "%255s", EmailSpam) != 0) {
+							if(!feof(fp))
+								if(fscanf(fp, "%d", &spamLevel)==0)
+									spamLevel=2;
+							if(spamLevel>4)
+								spamLevel=2;
+							if(strstr(Browser->value,EmailSpam)!=NULL) {
+								if((Mail->Flags & (YAMN_MSG_SPAMMASK==0)) && (spamLevel==0))
+									Mail->Flags&=~(YAMN_MSG_SOUND | YAMN_MSG_APP | YAMN_MSG_POPUP | YAMN_MSG_SYSTRAY | YAMN_MSG_BROWSER);
+								else if((Mail->Flags & YAMN_MSG_SPAMMASK) < spamLevel)			//if some filter plugin set higher level of spam, we do nothing
+									Mail->Flags=(Mail->Flags & ~YAMN_MSG_SPAMMASK)+spamLevel;	//else we set spam level 2 (clearing spam bits and then settting them to level 2
+							}
+						}
+					}
+				}
+		}
+		fclose(fp);
+	}
+	return 1;
+}
diff --git a/plugins/YAMN/filter/Simple/simple.dsp b/plugins/YAMN/filter/Simple/simple.dsp
new file mode 100644
index 0000000000..dc6d52e6c1
--- /dev/null
+++ b/plugins/YAMN/filter/Simple/simple.dsp
@@ -0,0 +1,105 @@
+# Microsoft Developer Studio Project File - Name="simple" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=simple - Win32 Release
+!MESSAGE Dies ist kein g�ltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und f�hren Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "simple.mak".
+!MESSAGE 
+!MESSAGE Sie k�nnen beim Ausf�hren von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "simple.mak" CFG="simple - Win32 Release"
+!MESSAGE 
+!MESSAGE F�r die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "simple - Win32 Release" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "simple - Win32 Debug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "simple - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /G4 /Zp4 /MD /W3 /GX /Zi /O1 /Ob0 /I "../../../../include" /I "../../../../include/msapi" /I "../../../../include_API" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /machine:I386 /out:"../../../../bin/release/plugins/YAMN-filter/simple.dll" /filealign:512
+# ADD LINK32 kernel32.lib user32.lib /nologo /dll /pdb:"../../../../bin/Release/plugins/YAMN/simple.pdb" /debug /machine:I386 /out:"../../../../bin/Release/plugins/YAMN/simple.dll" /filealign:512
+
+!ELSEIF  "$(CFG)" == "simple - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../../../include" /I "../../../../include/msapi" /I "../../../../include_API" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x417 /d "_DEBUG"
+# ADD RSC /l 0x417 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib /nologo /dll /debug /machine:I386 /out:"../../../../bin/Debug/plugins/YAMN-filter/simple.dll"
+# ADD LINK32 kernel32.lib user32.lib /nologo /dll /pdb:"../../../../bin/Debug/plugins/YAMN/simple.pdb" /debug /machine:I386 /out:"../../../../bin/Debug/plugins/YAMN/simple.dll" /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "simple - Win32 Release"
+# Name "simple - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\maindll.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/plugins/YAMN/filter/Simple/simple.mak b/plugins/YAMN/filter/Simple/simple.mak
new file mode 100644
index 0000000000..085dc22e33
--- /dev/null
+++ b/plugins/YAMN/filter/Simple/simple.mak
@@ -0,0 +1,207 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on simple.dsp
+!IF "$(CFG)" == ""
+CFG=simple - Win32 Release
+!MESSAGE No configuration specified. Defaulting to simple - Win32 Release.
+!ENDIF 
+
+!IF "$(CFG)" != "simple - Win32 Release" && "$(CFG)" != "simple - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "simple.mak" CFG="simple - Win32 Release"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "simple - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "simple - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "simple - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "..\..\..\..\bin\release\plugins\YAMN-filter\simple.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\maindll.obj"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\simple.exp"
+	-@erase "..\..\..\..\bin\release\plugins\YAMN-filter\simple.dll"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MD /W3 /GX /O1 /Ob0 /I "../../../../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fp"$(INTDIR)\simple.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\simple.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\simple.pdb" /machine:I386 /out:"../../../../bin/release/plugins/YAMN-filter/simple.dll" /implib:"$(OUTDIR)\simple.lib" /filealign:512 
+LINK32_OBJS= \
+	"$(INTDIR)\maindll.obj"
+
+"..\..\..\..\bin\release\plugins\YAMN-filter\simple.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF  "$(CFG)" == "simple - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "..\..\..\..\bin\Debug\plugins\YAMN-filter\simple.dll" "$(OUTDIR)\simple.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\maindll.obj"
+	-@erase "$(INTDIR)\maindll.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\simple.bsc"
+	-@erase "$(OUTDIR)\simple.exp"
+	-@erase "$(OUTDIR)\simple.pdb"
+	-@erase "..\..\..\..\bin\Debug\plugins\YAMN-filter\simple.dll"
+	-@erase "..\..\..\..\bin\Debug\plugins\YAMN-filter\simple.ilk"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /G4 /Zp4 /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../../../../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\simple.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\simple.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\maindll.sbr"
+
+"$(OUTDIR)\simple.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\simple.pdb" /debug /machine:I386 /out:"../../../../bin/Debug/plugins/YAMN-filter/simple.dll" /implib:"$(OUTDIR)\simple.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\maindll.obj"
+
+"..\..\..\..\bin\Debug\plugins\YAMN-filter\simple.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("simple.dep")
+!INCLUDE "simple.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "simple.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "simple - Win32 Release" || "$(CFG)" == "simple - Win32 Debug"
+SOURCE=.\maindll.cpp
+
+!IF  "$(CFG)" == "simple - Win32 Release"
+
+
+"$(INTDIR)\maindll.obj" : $(SOURCE) "$(INTDIR)"
+
+
+!ELSEIF  "$(CFG)" == "simple - Win32 Debug"
+
+
+"$(INTDIR)\maindll.obj"	"$(INTDIR)\maindll.sbr" : $(SOURCE) "$(INTDIR)"
+
+
+!ENDIF 
+
+
+!ENDIF 
+
diff --git a/plugins/YAMN/filter/readme.txt b/plugins/YAMN/filter/readme.txt
new file mode 100644
index 0000000000..a46db0236a
--- /dev/null
+++ b/plugins/YAMN/filter/readme.txt
@@ -0,0 +1 @@
+This folder contains filter plugin sources for YAMN.
\ No newline at end of file
diff --git a/plugins/YAMN/filterplugin.cpp b/plugins/YAMN/filterplugin.cpp
new file mode 100644
index 0000000000..cf7252d369
--- /dev/null
+++ b/plugins/YAMN/filterplugin.cpp
@@ -0,0 +1,226 @@
+/*
+ * YAMN plugin export functions for filtering
+ *
+ * (c) majvan 2002-2004
+ */
+
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+#include <newpluginapi.h>
+#include <m_database.h>
+#include "m_yamn.h"
+#include "m_filterplugin.h"
+#include "mails/m_mails.h"
+#include "debug.h"
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//From main.cpp
+extern LPCRITICAL_SECTION PluginRegCS;
+extern YAMN_VARIABLES YAMNVar;
+//From synchro.cpp
+extern DWORD WINAPI WaitToWriteFcn(PSWMRG SObject,PSCOUNTER=NULL);
+extern void WINAPI WriteDoneFcn(PSWMRG SObject,PSCOUNTER=NULL);
+//From maild.cpp
+extern INT_PTR LoadMailDataSvc(WPARAM wParam,LPARAM lParam);
+extern INT_PTR UnloadMailDataSvc(WPARAM wParam,LPARAM);
+extern INT_PTR SaveMailDataSvc(WPARAM wParam,LPARAM lParam);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+PYAMN_FILTERPLUGINQUEUE FirstFilterPlugin=NULL;
+
+INT_PTR RegisterFilterPluginSvc(WPARAM,LPARAM);
+
+//Removes plugin from queue and deletes its structures
+INT_PTR UnregisterFilterPlugin(HYAMNFILTERPLUGIN Plugin);
+
+INT_PTR UnregisterFilterPluginSvc(WPARAM wParam,LPARAM lParam);
+
+//Removes all filter plugins
+INT_PTR UnregisterFilterPlugins();
+
+INT_PTR FilterMailSvc(WPARAM,LPARAM);
+
+//Sets imported functions for an plugin and therefore it starts plugin to be registered and running
+// Plugin- plugin, which wants to set its functions
+// Importance- importance of plugin (see m_filterplugin.h)
+// YAMNFilterFcn- pointer to imported functions
+// YAMNfilterFcnVer- version of YAMN_FILTERIMPORTFCN, use YAMN_FILTERIMPORTFCNVERSION
+// returns nonzero if success
+int WINAPI SetFilterPluginFcnImportFcn(HYAMNFILTERPLUGIN Plugin,DWORD Importance,PYAMN_FILTERIMPORTFCN YAMNFilterFcn,DWORD YAMNFilterFcnVer);
+
+struct CExportedFunctions FilterPluginExportedFcn[]=
+{
+	{YAMN_SETFILTERPLUGINFCNIMPORTID,(void *)SetFilterPluginFcnImportFcn},
+};
+
+struct CExportedServices FilterPluginExportedSvc[]=
+{
+	{MS_YAMN_REGISTERFILTERPLUGIN,RegisterFilterPluginSvc},
+	{MS_YAMN_UNREGISTERFILTERPLUGIN,UnregisterFilterPluginSvc},
+};
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+INT_PTR RegisterFilterPluginSvc(WPARAM wParam,LPARAM lParam)
+{
+	PYAMN_FILTERREGISTRATION Registration=(PYAMN_FILTERREGISTRATION)wParam;
+	HYAMNFILTERPLUGIN Plugin;
+
+	if(lParam!=YAMN_FILTERREGISTRATIONVERSION)
+		return 0;
+	if((Registration->Name==NULL) || (Registration->Ver==NULL))
+		return NULL;
+	if(NULL==(Plugin=new YAMN_FILTERPLUGIN))
+		return NULL;
+
+	Plugin->PluginInfo=Registration;
+
+	Plugin->FilterFcn=NULL;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"::: YAMN- new filter registered: %0x (%s) :::\n",Plugin,Registration->Name);
+#endif
+	return (INT_PTR)Plugin;
+}
+
+INT_PTR UnregisterFilterPlugin(HYAMNFILTERPLUGIN Plugin)
+{
+	PYAMN_FILTERPLUGINQUEUE Parser,Found;
+
+	if(FirstFilterPlugin->Plugin==Plugin)
+	{
+		Found=FirstFilterPlugin;
+		FirstFilterPlugin=FirstFilterPlugin->Next;
+	}
+	else
+	{
+		for(Parser=FirstFilterPlugin;(Parser->Next!=NULL) && (Plugin!=Parser->Next->Plugin);Parser=Parser->Next);
+		if(Parser->Next!=NULL)
+		{
+			Found=Parser->Next;
+			Parser->Next=Parser->Next->Next;
+		}
+		else
+			Found=NULL;
+	}
+	if(Found!=NULL)
+	{
+		if(Plugin->FilterFcn->UnLoadFcn!=NULL)
+			Plugin->FilterFcn->UnLoadFcn((void *)0);
+		
+		delete Found->Plugin;
+		delete Found;
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"::: YAMN- filter %0x unregistered :::\n",Plugin);
+#endif
+	}
+	else
+		return 0;
+	return 1;
+}
+
+INT_PTR UnregisterFilterPluginSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNFILTERPLUGIN Plugin=(HYAMNFILTERPLUGIN)wParam;
+
+	EnterCriticalSection(PluginRegCS);
+	UnregisterFilterPlugin(Plugin);
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+}
+
+INT_PTR UnregisterFilterPlugins()
+{
+	EnterCriticalSection(PluginRegCS);
+//We remove protocols from the protocol list
+	while(FirstFilterPlugin!=NULL)
+		UnregisterFilterPlugin(FirstFilterPlugin->Plugin);
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+}
+
+int WINAPI SetFilterPluginFcnImportFcn(HYAMNFILTERPLUGIN Plugin,DWORD Importance,PYAMN_FILTERIMPORTFCN YAMNFilterFcn,DWORD YAMNFilterFcnVer)
+{
+	PYAMN_FILTERPLUGINQUEUE Parser,Previous;
+
+	if(YAMNFilterFcnVer!=YAMN_FILTERIMPORTFCNVERSION)
+		return 0;
+	if(YAMNFilterFcn==NULL)
+		return 0;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"::: YAMN- filter %0x import succeed :::\n",Plugin);
+#endif
+	Plugin->Importance=Importance;
+	Plugin->FilterFcn=YAMNFilterFcn;
+
+	EnterCriticalSection(PluginRegCS);
+//We add protocol to the protocol list
+	for(Previous=NULL,Parser=FirstFilterPlugin;Parser!=NULL && Parser->Next!=NULL && Parser->Plugin->Importance<=Importance;Previous=Parser,Parser=Parser->Next);
+	if(Previous==NULL)	//insert to the beginnig of queue
+	{
+		FirstFilterPlugin=new YAMN_FILTERPLUGINQUEUE;
+		FirstFilterPlugin->Plugin=Plugin;
+		FirstFilterPlugin->Next=Parser;
+	}
+	else
+	{
+		Previous->Next=new YAMN_FILTERPLUGINQUEUE;
+		Previous=Previous->Next;			//leave previous, go to actual plugin
+		Previous->Plugin=Plugin;
+		Previous->Next=Parser;				//and in actual plugin set, that next plugin is the one we insert in front of
+	}
+
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+}
+
+INT_PTR FilterMailSvc(WPARAM wParam,LPARAM lParam)
+{
+	HACCOUNT Account=(HACCOUNT)wParam;
+	HYAMNMAIL Mail=(HYAMNMAIL)lParam;
+	PYAMN_FILTERPLUGINQUEUE ActualPlugin;
+
+	EnterCriticalSection(PluginRegCS);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"FilterMail:ActualAccountMsgsSO-write wait\n");
+#endif
+	WaitToWriteFcn(Account->MessagesAccessSO);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"FilterMail:ActualAccountMsgsSO-write enter\n");
+#endif
+	for(ActualPlugin=FirstFilterPlugin;ActualPlugin!=NULL;ActualPlugin=ActualPlugin->Next)
+	{
+		if(ActualPlugin->Plugin->FilterFcn->FilterMailFcnPtr!=NULL)
+		{
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"\tFiltering Mail, running plugin %0x to filter mail\n",ActualPlugin->Plugin);
+#endif
+			ActualPlugin->Plugin->FilterFcn->FilterMailFcnPtr(Account,YAMN_ACCOUNTVERSION,Mail,YAMN_MAILVERSION);
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"\tFiltering Mail done\n");
+#endif
+		}
+	}
+	Mail->Flags|=YAMN_MSG_FILTERED;
+
+//Set mail flags according to spamlevel settings
+	if((Mail->Flags & YAMN_MSG_SPAMMASK) > YAMN_MSG_SPAML1)
+		Mail->Flags=Mail->Flags & ~(YAMN_MSG_BROWSER | YAMN_MSG_POPUP | YAMN_MSG_SYSTRAY | YAMN_MSG_SOUND | YAMN_MSG_APP | YAMN_MSG_NEVENT);
+	if(YAMN_MSG_SPAML(Mail->Flags,YAMN_MSG_SPAML3) || YAMN_MSG_SPAML(Mail->Flags,YAMN_MSG_SPAML4))
+		Mail->Flags=Mail->Flags | (YAMN_MSG_AUTODELETE | YAMN_MSG_DELETEOK);	//set message to delete
+	if(YAMN_MSG_SPAML(Mail->Flags,YAMN_MSG_SPAML3))
+		Mail->Flags=Mail->Flags & ~(YAMN_MSG_MEMDELETE);	//set message not to delete it immidiatelly from memory
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"FilterMail:ActualAccountMsgsSO-write done\n");
+#endif
+	WriteDoneFcn(Account->MessagesAccessSO);
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+}
diff --git a/plugins/YAMN/icons/iconttbup.ico b/plugins/YAMN/icons/iconttbup.ico
new file mode 100644
index 0000000000..ad18c56822
Binary files /dev/null and b/plugins/YAMN/icons/iconttbup.ico differ
diff --git a/plugins/YAMN/icons/icoyamn1.ico b/plugins/YAMN/icons/icoyamn1.ico
new file mode 100644
index 0000000000..d3959b4fd7
Binary files /dev/null and b/plugins/YAMN/icons/icoyamn1.ico differ
diff --git a/plugins/YAMN/icons/icoyamn2.ico b/plugins/YAMN/icons/icoyamn2.ico
new file mode 100644
index 0000000000..dfada56b5f
Binary files /dev/null and b/plugins/YAMN/icons/icoyamn2.ico differ
diff --git a/plugins/YAMN/icons/proto_YAMN.dsp b/plugins/YAMN/icons/proto_YAMN.dsp
new file mode 100644
index 0000000000..93652bab21
--- /dev/null
+++ b/plugins/YAMN/icons/proto_YAMN.dsp
@@ -0,0 +1,91 @@
+# Microsoft Developer Studio Project File - Name="proto_YAMN" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=proto_YAMN - Win32 Release
+!MESSAGE Dies ist kein g�ltiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und f�hren Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "proto_YAMN.mak".
+!MESSAGE 
+!MESSAGE Sie k�nnen beim Ausf�hren von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "proto_YAMN.mak" CFG="proto_YAMN - Win32 Release"
+!MESSAGE 
+!MESSAGE F�r die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "proto_YAMN - Win32 Release" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo
+# ADD CPP /nologo
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 /nologo /subsystem:windows /dll /pdb:none /machine:I386 /nodefaultlib /out:"../../../bin/release/icons/proto_YAMN.dll" /filealign:512 /noentry
+# ADD LINK32 /nologo /subsystem:windows /dll /pdb:none /machine:I386 /nodefaultlib /out:"../../../bin/Release/Icons/proto_YAMN.dll" /filealign:512 /noentry
+# Begin Target
+
+# Name "proto_YAMN - Win32 Release"
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\resources\iconeutral.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\resources\iconttbdown.ico
+# End Source File
+# Begin Source File
+
+SOURCE=iconttbup.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\resources\icooffline.ico
+# End Source File
+# Begin Source File
+
+SOURCE=icoyamn1.ico
+# End Source File
+# Begin Source File
+
+SOURCE=icoyamn2.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\resources\icoyamn3.ico
+# End Source File
+# Begin Source File
+
+SOURCE=proto_YAMN.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/plugins/YAMN/icons/proto_YAMN.mak b/plugins/YAMN/icons/proto_YAMN.mak
new file mode 100644
index 0000000000..94c25d7316
--- /dev/null
+++ b/plugins/YAMN/icons/proto_YAMN.mak
@@ -0,0 +1,112 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on proto_YAMN.dsp
+!IF "$(CFG)" == ""
+CFG=proto_YAMN - Win32 Release
+!MESSAGE No configuration specified. Defaulting to proto_YAMN - Win32 Release.
+!ENDIF 
+
+!IF "$(CFG)" != "proto_YAMN - Win32 Release"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "proto_YAMN.mak" CFG="proto_YAMN - Win32 Release"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "proto_YAMN - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+OUTDIR=.\Release
+INTDIR=.\Release
+
+ALL : "..\..\..\bin\release\icons\proto_YAMN.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\proto_YAMN.res"
+	-@erase "$(OUTDIR)\proto_YAMN.exp"
+	-@erase "$(OUTDIR)\proto_YAMN.lib"
+	-@erase "..\..\..\bin\release\icons\proto_YAMN.dll"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /ML /Fo"$(INTDIR)\\" 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=
+RSC=rc.exe
+RSC_PROJ=/l 0x417 /fo"$(INTDIR)\proto_YAMN.res" /d "NDEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\proto_YAMN.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=/nologo /subsystem:windows /dll /pdb:none /machine:I386 /nodefaultlib /out:"../../../bin/release/icons/proto_YAMN.dll" /implib:"$(OUTDIR)\proto_YAMN.lib" /filealign:512 /noentry 
+LINK32_OBJS= \
+	"$(INTDIR)\proto_YAMN.res"
+
+"..\..\..\bin\release\icons\proto_YAMN.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("proto_YAMN.dep")
+!INCLUDE "proto_YAMN.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "proto_YAMN.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "proto_YAMN - Win32 Release"
+SOURCE=proto_YAMN.rc
+
+"$(INTDIR)\proto_YAMN.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF 
+
diff --git a/plugins/YAMN/icons/proto_YAMN.rc b/plugins/YAMN/icons/proto_YAMN.rc
new file mode 100644
index 0000000000..e20bd50bda
--- /dev/null
+++ b/plugins/YAMN/icons/proto_YAMN.rc
@@ -0,0 +1,19 @@
+#include "resource.h"
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+
+IDI_ONLINE              ICON    DISCARDABLE     "../resources/iconeutral.ico"
+IDI_ICOYAMN1            ICON    DISCARDABLE     "icoyamn1.ico"
+IDI_ICOYAMN2            ICON    DISCARDABLE     "icoyamn2.ico"
+IDI_ICOTTBUP            ICON    DISCARDABLE     "iconttbup.ico"
+
+IDI_OFFLINE             ICON    DISCARDABLE     "../resources/icooffline.ico"
+IDI_NA                  ICON    DISCARDABLE     "../resources/icoyamn3.ico"
+IDI_OCCUPIED            ICON    DISCARDABLE     "../resources/iconttbdown.ico"
diff --git a/plugins/YAMN/icons/proto_YAMN.vcproj b/plugins/YAMN/icons/proto_YAMN.vcproj
new file mode 100644
index 0000000000..e4c1d85d15
--- /dev/null
+++ b/plugins/YAMN/icons/proto_YAMN.vcproj
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="Proto_Yamn"
+	ProjectGUID="{C1CDB82C-6BBF-496E-88F4-CC57E60B0CA9}"
+	RootNamespace="Proto_Yamn"
+	TargetFrameworkVersion="0"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="../../../../Files/Release/Icons"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TypeLibraryName=".\Release/proto_YAMN.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="4"
+				RuntimeLibrary="0"
+				PrecompiledHeaderFile=".\Release/proto_YAMN.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/filealign:512"
+				AdditionalDependencies="odbc32.lib odbccp32.lib"
+				IgnoreAllDefaultLibraries="true"
+				SubSystem="2"
+				ResourceOnlyDLL="true"
+				RandomizedBaseAddress="1"
+				ImportLibrary=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="../../../../Files/Debug/Icons"
+			IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/$(ProjectName)"
+			ConfigurationType="2"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+				TypeLibraryName=".\Release/proto_YAMN.tlb"
+				HeaderFileName=""
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="4"
+				RuntimeLibrary="0"
+				PrecompiledHeaderFile=".\Release/proto_YAMN.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/filealign:512"
+				AdditionalDependencies="odbc32.lib odbccp32.lib"
+				IgnoreAllDefaultLibraries="true"
+				SubSystem="2"
+				ResourceOnlyDLL="true"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+				ImportLibrary=""
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+			>
+			<File
+				RelativePath="..\resources\iconeutral.ico"
+				>
+			</File>
+			<File
+				RelativePath="..\resources\iconttbdown.ico"
+				>
+			</File>
+			<File
+				RelativePath="iconttbup.ico"
+				>
+			</File>
+			<File
+				RelativePath="..\resources\icooffline.ico"
+				>
+			</File>
+			<File
+				RelativePath="icoyamn1.ico"
+				>
+			</File>
+			<File
+				RelativePath="icoyamn2.ico"
+				>
+			</File>
+			<File
+				RelativePath="..\resources\icoyamn3.ico"
+				>
+			</File>
+			<File
+				RelativePath="proto_YAMN.rc"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCResourceCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/plugins/YAMN/icons/proto_YAMN_10.vcxproj b/plugins/YAMN/icons/proto_YAMN_10.vcxproj
new file mode 100644
index 0000000000..9d48ff52c0
--- /dev/null
+++ b/plugins/YAMN/icons/proto_YAMN_10.vcxproj
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectName>Proto_Yamn</ProjectName>
+    <ProjectGuid>{C1CDB82C-6BBF-496E-88F4-CC57E60B0CA9}</ProjectGuid>
+    <RootNamespace>Proto_Yamn</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseOfMfc>false</UseOfMfc>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../../../Files/Release/Icons\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../../../Files/Debug/Icons\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+    <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+    <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <TypeLibraryName>.\Release/proto_YAMN.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>.\Release/proto_YAMN.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
+      <ObjectFileName>.\Release/</ObjectFileName>
+      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <AdditionalOptions>/filealign:512 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
+      <SubSystem>Windows</SubSystem>
+      <NoEntryPoint>true</NoEntryPoint>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <ImportLibrary>
+      </ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <TypeLibraryName>.\Release/proto_YAMN.tlb</TypeLibraryName>
+      <HeaderFileName>
+      </HeaderFileName>
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>.\Release/proto_YAMN.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
+      <ObjectFileName>.\Release/</ObjectFileName>
+      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+    <Link>
+      <AdditionalOptions>/filealign:512 %(AdditionalOptions)</AdditionalOptions>
+      <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
+      <SubSystem>Windows</SubSystem>
+      <NoEntryPoint>true</NoEntryPoint>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImportLibrary>
+      </ImportLibrary>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <None Include="..\resources\iconeutral.ico" />
+    <None Include="..\resources\iconttbdown.ico" />
+    <None Include="iconttbup.ico" />
+    <None Include="..\resources\icooffline.ico" />
+    <None Include="icoyamn1.ico" />
+    <None Include="icoyamn2.ico" />
+    <None Include="..\resources\icoyamn3.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="proto_YAMN.rc">
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ResourceCompile>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/plugins/YAMN/icons/proto_YAMN_10.vcxproj.filters b/plugins/YAMN/icons/proto_YAMN_10.vcxproj.filters
new file mode 100644
index 0000000000..ae56e318a4
--- /dev/null
+++ b/plugins/YAMN/icons/proto_YAMN_10.vcxproj.filters
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{4726e1d1-39cd-435a-bd59-51fdb6745f46}</UniqueIdentifier>
+      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\resources\iconeutral.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="..\resources\iconttbdown.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="iconttbup.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="..\resources\icooffline.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="icoyamn1.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="icoyamn2.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+    <None Include="..\resources\icoyamn3.ico">
+      <Filter>Resource Files</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="proto_YAMN.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/plugins/YAMN/icons/resource.h b/plugins/YAMN/icons/resource.h
new file mode 100644
index 0000000000..af36adfdae
--- /dev/null
+++ b/plugins/YAMN/icons/resource.h
@@ -0,0 +1,2 @@
+#include "../resources/resource.h"
+
diff --git a/plugins/YAMN/include/IcoLib.h b/plugins/YAMN/include/IcoLib.h
new file mode 100644
index 0000000000..a911ba571d
--- /dev/null
+++ b/plugins/YAMN/include/IcoLib.h
@@ -0,0 +1,26 @@
+typedef struct {
+	int cbSize;
+    char *pszSection;        //section name used to group icons
+	char *pszDescription;	   //description for options dialog
+	char *pszName;		   //name to refer to icon when playing and in db
+    char *pszDefaultFile;    //default icon file to use
+	int  iDefaultIndex;
+} SKINICONDESC;
+
+//
+//  Add a icon into options UI
+//  NB! pszName should be unique, e.g.: clistmw_apply, tabsrmm_history
+//
+//  wParam = (WPARAM)0
+//  lParam = (LPARAM)(SKINICONDESC*)sid;
+//
+#define MS_SKIN2_ADDICON "Skin2/Icons/AddIcon"
+//
+//  Retrieve HICON with name specified in lParam
+//  Returned HICON SHOULDN'T be destroyed, it managed by IcoLib
+//
+#define MS_SKIN2_GETICON "Skin2/Icons/GetIcon"
+//
+//  Icons change notification
+//
+#define ME_SKIN2_ICONSCHANGED "Skin2/IconsChanged"
diff --git a/plugins/YAMN/libs/unicows.lib b/plugins/YAMN/libs/unicows.lib
new file mode 100644
index 0000000000..9ef8bbd665
Binary files /dev/null and b/plugins/YAMN/libs/unicows.lib differ
diff --git a/plugins/YAMN/mails/decode.cpp b/plugins/YAMN/mails/decode.cpp
new file mode 100644
index 0000000000..15c23e9f34
--- /dev/null
+++ b/plugins/YAMN/mails/decode.cpp
@@ -0,0 +1,558 @@
+/*
+ * This code implements decoding encoded MIME header in style
+ * =?iso-8859-2?Q? "User using email in central Europe characters such as =E9" ?=
+ *
+ * (c) majvan 2002-2004
+ */
+#include "../yamn.h"
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+struct _tcptable CodePageNamesAll[]=
+{
+	{_T("ANSI"),_T(""),TRUE,CP_ACP},
+	{_T("WINDOWS-1"),_T("250"),0,1250},
+	{_T("WINDOWS-1"),_T("251"),0,1251},
+	{_T("WINDOWS-1"),_T("252"),0,1252},
+	{_T("WINDOWS-1"),_T("253"),0,1253},
+	{_T("WINDOWS-1"),_T("254"),0,1254},
+	{_T("WINDOWS-1"),_T("255"),0,1255},
+	{_T("WINDOWS-1"),_T("256"),0,1256},
+	{_T("WINDOWS-1"),_T("257"),0,1257},
+	{_T("WINDOWS-1"),_T("258"),0,1258},
+	{_T("CP1"),_T("250"),0,1250},
+	{_T("CP1"),_T("251"),0,1251},
+	{_T("CP1"),_T("252"),0,1252},
+	{_T("CP1"),_T("253"),0,1253},
+	{_T("CP1"),_T("254"),0,1254},
+	{_T("CP1"),_T("255"),0,1255},
+	{_T("CP1"),_T("256"),0,1256},
+	{_T("CP1"),_T("257"),0,1257},
+	{_T("CP1"),_T("258"),0,1258},
+	{_T("ANSI-1"),_T("250"),0,1250},
+	{_T("ANSI-1"),_T("251"),0,1251},
+	{_T("ANSI-1"),_T("252"),0,1252},
+	{_T("ANSI-1"),_T("253"),0,1253},
+	{_T("ANSI-1"),_T("254"),0,1254},
+	{_T("ANSI-1"),_T("255"),0,1255},
+	{_T("ANSI-1"),_T("256"),0,1256},
+	{_T("ANSI-1"),_T("257"),0,1257},
+	{_T("ANSI-1"),_T("258"),0,1258},
+	{_T("KOI8"),_T("-R"),0,20866},
+	{_T("KOI8"),_T(""),0,20866},
+	{_T("KOI8"),_T("-U"),0,21866},
+	{_T("KOI8"),_T("-RU"),0,21866},
+	{_T("US-"),_T("ASCII"),0,20127},
+	{_T("CP"),_T("367"),0,20127},
+	{_T("ASCII"),_T(""),0,20127},
+	{_T("ASCII"),_T("7"),0,20127},
+	{_T("ISO-8859"),_T("-1"),0,28591},
+	{_T("ISO-8859"),_T("-2"),0,28592},
+	{_T("ISO-8859"),_T("-3"),0,28593},
+	{_T("ISO-8859"),_T("-4"),0,28594},
+	{_T("ISO-8859"),_T("-5"),0,28595},
+	{_T("ISO-8859"),_T("-6"),0,28596},
+	{_T("ISO-8859"),_T("-7"),0,28597},
+	{_T("ISO-8859"),_T("-8"),0,28598},
+	{_T("ISO-8859"),_T("-9"),0,28599},
+	{_T("ISO-8859"),_T("-15"),0,28605},
+	{_T("ISO_8859"),_T("-1"),0,28591},
+	{_T("ISO_8859"),_T("-2"),0,28592},
+	{_T("ISO_8859"),_T("-3"),0,28593},
+	{_T("ISO_8859"),_T("-4"),0,28594},
+	{_T("ISO_8859"),_T("-5"),0,28595},
+	{_T("ISO_8859"),_T("-6"),0,28596},
+	{_T("ISO_8859"),_T("-7"),0,28597},
+	{_T("ISO_8859"),_T("-8"),0,28598},
+	{_T("ISO_8859"),_T("-9"),0,28599},
+	{_T("ISO_8859"),_T("-15"),0,28605},
+	{_T("ISO-"),_T("10646-USC2"),0,1200},
+	{_T("ISO-2022"),_T("/2-JP"),0,50220},
+	{_T("ISO-2022"),_T("-JP"),0,50221},
+	{_T("ISO-2022"),_T("/JIS-JP"),0,50222},
+	{_T("ISO-2022"),_T("-KR"),0,50225},
+	{_T("ISO-2022"),_T("-CH(SP)"),0,50227},
+	{_T("ISO-2022"),_T("-CH(TR)"),0,50229},
+	{_T("UTF-"),_T("7"),0,65000},
+	{_T("UTF-"),_T("8"),0,65001},
+	{_T("ARAB-"),_T("TRANSPARENT"),0,710},
+	{_T("ASMO-"),_T("TRANSPARENT"),0,720},
+	{_T("ASMO-"),_T("449"),0,709},
+	{_T("ASMO-"),_T("708"),0,708},
+	{_T("BIG5"),_T(""),0,950},
+	{_T("EUC-"),_T("CH(SP)"),0,51936},
+	{_T("EUC-"),_T("CH(TR)"),0,51950},
+	{_T("EUC-"),_T("JP"),0,51932},
+	{_T("EUC-"),_T("KR"),0,51949},
+	{_T("GB-"),_T("2312"),0,20936},
+	{_T("GB"),_T("2312"),0,20936},
+	{_T("HZGB-"),_T("2312"),0,52936},
+	{_T("IBM-"),_T("037"),0,37},
+	{_T("IBM-"),_T("290"),0,290},
+	{_T("IBM-"),_T("437"),0,437},
+	{_T("IBM-"),_T("500"),0,500},
+	{_T("IBM-"),_T("775"),0,775},
+	{_T("IBM-"),_T("850"),0,850},
+	{_T("IBM-"),_T("852"),0,852},
+	{_T("IBM-"),_T("855"),0,855},
+	{_T("IBM-"),_T("857"),0,857},
+	{_T("IBM-"),_T("860"),0,860},
+	{_T("IBM-"),_T("861"),0,861},
+	{_T("IBM-"),_T("862"),0,862},
+	{_T("IBM-"),_T("863"),0,863},
+	{_T("IBM-"),_T("864"),0,864},
+	{_T("IBM-"),_T("865"),0,865},
+	{_T("IBM-"),_T("866"),0,866},
+	{_T("IBM-"),_T("869"),0,869},
+	{_T("IBM-"),_T("870"),0,870},
+	{_T("IBM-"),_T("875"),0,875},
+	{_T("IBM-"),_T("1026"),0,1026},
+	{_T("IBM-"),_T("273"),0,20273},
+	{_T("IBM-"),_T("277"),0,20277},
+	{_T("IBM-"),_T("278"),0,20278},
+	{_T("IBM-"),_T("280"),0,20280},
+	{_T("IBM-"),_T("284"),0,20284},
+	{_T("IBM-"),_T("285"),0,20285},
+	{_T("IBM-"),_T("290"),0,20290},
+	{_T("IBM-"),_T("297"),0,20297},
+	{_T("IBM-"),_T("420"),0,20420},
+	{_T("IBM-"),_T("423"),0,20423},
+	{_T("IBM-"),_T("871"),0,20871},
+	{_T("IBM-"),_T("880"),0,20880},
+	{_T("IBM-"),_T("905"),0,20905},
+	{_T("IBM-"),_T("THAI"),0,20838},
+	{_T("ISCII-"),_T("DEVANAGARI"),0,57002},
+	{_T("ISCII-"),_T("BENGALI"),0,57003},
+	{_T("ISCII-"),_T("TAMIL"),0,57004},
+	{_T("ISCII-"),_T("TELUGU"),0,57005},
+	{_T("ISCII-"),_T("ASSAMESE"),0,57006},
+	{_T("ISCII-"),_T("ORIYA"),0,57007},
+	{_T("ISCII-"),_T("KANNADA"),0,57008},
+	{_T("ISCII-"),_T("MALAYALAM"),0,57009},
+	{_T("ISCII-"),_T("GUJARATI"),0,57010},
+	{_T("ISCII-"),_T("PUNJABI"),0,57011},
+	{_T("KOR-"),_T("JOHAB"),0,1361},
+	{_T("KSC-"),_T("5601"),0,1361},
+	{_T("MAC-"),_T("ROMAN"),0,10000},
+	{_T("MAC-"),_T("JP"),0,10001},
+	{_T("MAC-"),_T("CH(SP)(BIG5)"),0,10002},
+	{_T("MAC-"),_T("KR"),0,10003},
+	{_T("MAC-"),_T("AR"),0,10004}, 
+	{_T("MAC-"),_T("HW"),0,10005},
+	{_T("MAC-"),_T("GR"),0,10006},
+	{_T("MAC-"),_T("CY"),0,10007},
+	{_T("MAC-"),_T("CH(SP)(GB2312)"),0,10008},
+	{_T("MAC-"),_T("ROMANIA"),0,10010},
+	{_T("MAC-"),_T("UA"),0,10017},
+	{_T("MAC-"),_T("TH"),0,10021},
+	{_T("MAC-"),_T("LAT2"),0,10029},
+	{_T("MAC-"),_T("ICE"),0,10079},
+	{_T("MAC-"),_T("TR"),0,10081},
+	{_T("MAC-"),_T("CR"),0,10082},
+};
+
+int CPLENALL = (sizeof(CodePageNamesAll)/sizeof(CodePageNamesAll[0]));
+struct _tcptable *CodePageNamesSupp;
+int CPLENSUPP = 1;
+
+//Gets codepage ID from string representing charset such as "iso-8859-1"
+// input- the string
+// size- max length of input string
+int GetCharsetFromString(char *input,size_t size);
+
+//HexValue to DecValue ('a' to 10)
+// HexValue- hexa value ('a')
+// DecValue- poiner where to store dec value
+// returns 0 if not success
+int FromHexa(char HexValue,char *DecValue);
+
+//Decodes a char from Base64
+// Base64Value- input char in Base64
+// DecValue- pointer where to store the result
+// returns 0 if not success
+int FromBase64(char Base64Value,char *DecValue);
+
+//Decodes string in quoted printable
+// Src- input string
+// Dst- where to store output string
+// DstLen- how max long should be output string
+// isQ- if is "Q-encoding" modification. should be TRUE in headers
+// always returns 1
+int DecodeQuotedPrintable(char *Src,char *Dst,int DstLen, BOOL isQ);
+
+//Decodes string in base64
+// Src- input string
+// Dst- where to store output string
+// DstLen- how max long should be output string
+// returns 0 if string was not properly decoded
+int DecodeBase64(char *Src,char *Dst,int DstLen);
+
+//Converts string to unicode from string with specified codepage
+// stream- input string
+// cp- codepage of input string
+// out- pointer to new allocated memory that contains unicode string
+int ConvertStringToUnicode(char *stream,unsigned int cp,WCHAR **out);
+
+//Converts string from MIME header to unicode
+// stream- input string
+// cp- codepage of input string
+// storeto- pointer to memory that contains unicode string
+// mode- MIME_PLAIN or MIME_MAIL (MIME_MAIL deletes '"' from start and end of string)
+void ConvertCodedStringToUnicode(char *stream,WCHAR **storeto,DWORD cp,int mode);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+int GetCharsetFromString(char *input,size_t size)
+//"ISO-8859-1" to ID from table
+{
+	char *pin=input;
+	char *pout,*parser;
+
+	if((size<1) || (parser=pout=new char[size+1])==NULL)
+		return -1;
+	while((*pin!=0) && (pin-input< (INT_PTR)size))
+	{
+		if ((*pin>='a') && (*pin<='z'))
+			*parser++=*(pin++)-('a'-'A'); // make it capital
+		//else if(*pin=='\"') // this is already done in ExtractFromContentType
+		//	*pin++; //skip the quotes if any
+		else 
+			*parser++=*pin++;
+	}
+
+	*parser=(char)0;
+
+#ifdef DEBUG_DECODECODEPAGE
+	DebugLog(DecodeFile,"<CodePage>%s</CodePage>",pout);
+#endif
+	for(int i=0;i<CPLENALL;i++){
+		size_t len = strlen(CodePageNamesAll[i].NameBase);
+		if(0==strncmp(pout,CodePageNamesAll[i].NameBase,len)){
+			if (0==strcmp(pout+len,CodePageNamesAll[i].NameSub)){
+				delete[] pout;
+				return CodePageNamesAll[i].CP;
+			}
+		}
+	}
+	delete[] pout;
+	return -1;		//not found
+}
+
+int FromHexa(char HexValue,char *DecValue)
+{
+	if(HexValue>='0' && HexValue<='9')
+	{
+		*DecValue=HexValue-'0';
+		return 1;
+	}
+	if(HexValue>='A' && HexValue<='F')
+	{
+		*DecValue=HexValue-'A'+10;
+		return 1;
+	}
+	if(HexValue>='a' && HexValue<='f')
+	{
+		*DecValue=HexValue-'a'+10;
+		return 1;
+	}
+	return 0;
+}
+
+int FromBase64(char Base64Value,char *DecValue)
+{
+	if(Base64Value>='A' && Base64Value<='Z')
+	{
+		*DecValue=Base64Value-'A';
+		return 1;
+	}
+	if(Base64Value>='a' && Base64Value<='z')
+	{
+		*DecValue=Base64Value-'a'+26;
+		return 1;
+	}
+	if(Base64Value>='0' && Base64Value<='9')
+	{
+		*DecValue=Base64Value-'0'+52;
+		return 1;
+	}
+	if(Base64Value=='+')
+	{
+		*DecValue=Base64Value-'+'+62;
+		return 1;
+	}
+	if(Base64Value=='/')
+	{
+		*DecValue=Base64Value-'/'+63;
+		return 1;
+	}
+	if(Base64Value=='=')
+	{
+		*DecValue=0;
+		return 1;
+	}
+	return 0;
+}
+
+int DecodeQuotedPrintable(char *Src,char *Dst,int DstLen, BOOL isQ)
+{
+#ifdef DEBUG_DECODEQUOTED
+	char *DstTemp=Dst;
+	DebugLog(DecodeFile,"<Decode Quoted><Input>%s</Input>",Src);
+#endif
+	for(int Counter=0;((char)*Src!=0) && DstLen && (Counter++<DstLen);Src++,Dst++)
+		if(*Src=='=')
+		{
+			if (!isQ){
+				if (Src[1]==0x0D){
+					Src++; Src++;
+					if (Src[0]==0x0A) Src++;
+					goto CopyCharQuotedPrintable;
+				}
+				if (Src[1]==0x0A){
+					Src++; Src++;
+					goto CopyCharQuotedPrintable;
+				}
+			}
+			char First,Second;
+			if(!FromHexa(*(++Src),&First))
+			{
+				*Dst++='=';Src--;
+				continue;
+			}
+			if(!FromHexa(*(++Src),&Second))
+			{
+				*Dst++='=';Src--;Src--;
+				continue;
+			}
+			*Dst=(char)(First)<<4;
+			*Dst+=Second;
+		}
+		else if(isQ && *Src=='_')
+			*Dst=' ';
+		else
+CopyCharQuotedPrintable: // Yeah. Bad programming stile.
+			*Dst=*Src;
+	*Dst=(char)0;
+#ifdef DEBUG_DECODEQUOTED
+	DebugLog(DecodeFile,"<Output>%s</Output></Decode Quoted>",DstTemp);
+#endif
+	return 1;
+}
+
+int DecodeBase64(char *Src,char *Dst,int DstLen)
+{
+	int Result=0;
+	char Locator=0,MiniResult[4];
+	char *End=Dst+DstLen;
+
+	MiniResult[0]=MiniResult[1]=MiniResult[2]=MiniResult[3]=0;
+
+#ifdef DEBUG_DECODEBASE64
+	char *DstTemp=Dst;
+	DebugLog(DecodeFile,"<Decode Base64><Input>\n%s\n</Input>\n",Src);
+#endif
+	while(*Src!=0 && DstLen && Dst!=End)
+	{
+		if ((*Src==0x0D)||(*Src==0x0A))	{
+			Src++; 
+			continue;
+		}
+		if((!(Result=FromBase64(*Src,MiniResult+Locator)) && (*Src==0)) || Locator++==3)	//end_of_str || end_of_4_bytes
+		{
+			Locator=0;									//next write to the first byte
+			*Dst++=(char)((MiniResult[0]<<2) | (MiniResult[1]>>4));
+			if(Dst==End) goto end;								//DstLen exceeded?
+			*Dst++=(char)((MiniResult[1]<<4) | (MiniResult[2]>>2));
+			if(Dst==End) goto end;								//someones don't like goto, but not me
+			*Dst++=(char)((MiniResult[2]<<6) | MiniResult[3]);
+			if(!Result && (*Src==0)) goto end;						//end of string?
+			MiniResult[0]=MiniResult[1]=MiniResult[2]=MiniResult[3]=0;			//zero 4byte buffer for next loop
+		}
+		if(!Result) return 0;									//unrecognised character occured
+		Src++;
+	}
+end:
+	*Dst=0;
+#ifdef DEBUG_DECODEBASE64
+	DebugLog(DecodeFile,"<Output>\n%s\n</Output></Decode Base64>",DstTemp);
+#endif
+	return 1;
+}
+
+
+
+int ConvertStringToUnicode(char *stream,unsigned int cp,WCHAR **out)
+{
+	CPINFO CPInfo;
+	WCHAR *temp,*src=*out,*dest;
+	size_t outlen;
+	int streamlen,Index;
+
+	//codepages, which require to have set 0 in dwFlags parameter when calling MultiByteToWideChar
+	DWORD CodePagesZeroFlags[]={50220,50221,50222,50225,50227,50229,52936,54936,57002,57003,57004,57005,57006,57007,57008,57009,57010,57011,65000,65001};
+
+	if((cp!=CP_ACP) && (cp!=CP_OEMCP) && (cp!=CP_MACCP) && (cp!=CP_THREAD_ACP) && (cp!=CP_SYMBOL) && (cp!=CP_UTF7) && (cp!=CP_UTF8) && !GetCPInfo(cp,&CPInfo))
+		cp=CP_ACP;
+#ifdef DEBUG_DECODECODEPAGE
+	DebugLog(DecodeFile,"<CodePage #>%d</CodePage #>",cp);
+#endif
+		
+	for(Index=0;Index<sizeof(CodePagesZeroFlags)/sizeof(CodePagesZeroFlags[0]);Index++)
+		if(CodePagesZeroFlags[Index]==cp)
+		{
+			Index=-1;
+			break;
+		}
+	if(Index==-1)
+		streamlen=MultiByteToWideChar(cp,0,stream,-1,NULL,0);
+	else
+		streamlen=MultiByteToWideChar(cp,MB_USEGLYPHCHARS,stream,-1,NULL,0);
+
+	if(*out!=NULL)
+		outlen=wcslen(*out);
+	else
+		outlen=0;
+	temp=new WCHAR[streamlen+outlen+1];
+
+	if(*out!=NULL)
+	{
+		for(dest=temp;*src!=(WCHAR)0;src++,dest++)				//copy old string from *out to temp
+			*dest=*src;
+//		*dest++=L' ';								//add space?
+		delete[] *out;
+	}
+	else
+		dest=temp;
+	*out=temp;
+	
+	if(Index==-1)
+	{
+		if(!MultiByteToWideChar(cp,0,stream,-1,dest,streamlen))
+			return 0;
+	}
+	else
+	{
+		if(!MultiByteToWideChar(cp,MB_USEGLYPHCHARS,stream,-1,dest,streamlen))
+			return 0;
+	}
+	return 1;
+}
+
+void ConvertCodedStringToUnicode(char *stream,WCHAR **storeto,DWORD cp,int mode)
+{
+	char *start=stream,*finder,*finderend;
+	char Encoding=0;
+	char *DecodedResult=NULL;
+
+	if(stream==NULL)
+		return;
+
+	while(WS(start)) start++;
+	WCHAR *tempstore=0;
+	if(!ConvertStringToUnicode(stream,cp,&tempstore))return;
+
+	size_t tempstoreLength = wcslen(tempstore);
+	
+	size_t outind = 0;
+	while(*start!=0){
+		if(CODES(start)){
+			finder=start+2;finderend=finder;
+			while(!CODED(finderend) && !EOS(finderend)) finderend++;
+			start = finderend;
+			if(CODED(finderend))
+			{
+				Encoding=*(finderend+1);
+				switch(Encoding)
+				{
+					case 'b':
+					case 'B':
+					case 'q':
+					case 'Q':
+						break;
+					default:
+						goto NotEncoded;
+				}
+				if(-1==(cp=(DWORD)GetCharsetFromString(finder,finderend-finder)))
+					cp=CP_ACP;
+				if(Encoding!=0)
+				{
+					int size,codeend;
+					char *pcodeend;
+
+					finder=finderend+2;
+					if(CODED(finder))
+						finder++;
+					while(WS(finder)) finder++;
+					finderend=finder;
+					while(!CODEE(finderend) && !EOS(finderend)) finderend++;
+					if(codeend=CODEE(finderend))
+						pcodeend=finderend;
+					while(WS(finderend-1)) finderend--;
+						if((mode==MIME_MAIL) && (((*finder=='"') && (*(finderend-1)=='"'))))
+					{
+						finder++;
+						finderend--;
+					}
+					//*finderend=(char)0;
+					char * oneWordEncoded = new char[finderend-finder+1];
+					strncpy(oneWordEncoded,finder,finderend-finder);
+					oneWordEncoded[finderend-finder]=0;
+					switch(Encoding)
+					{
+						case 'b':
+						case 'B':
+							size=(finderend-finder)*3/4+3+1+1;
+							break;
+						case 'q':
+						case 'Q':
+							size=finderend-finder+1+1;
+							break;
+					}
+					if(DecodedResult!=NULL)
+						delete[] DecodedResult;
+					DecodedResult=new char[size+1];
+					switch(Encoding)
+					{
+						case 'q':
+						case 'Q':
+							DecodeQuotedPrintable(oneWordEncoded,DecodedResult,size, TRUE);
+							break;
+						case 'b':
+						case 'B':
+							DecodeBase64(oneWordEncoded,DecodedResult,size);
+							break;
+					}
+					delete[] oneWordEncoded;
+					if(codeend)
+						finderend=pcodeend+2;
+					if(WS(finderend))	//if string continues and there's some whitespace, add space to string that is to be converted
+					{
+						size_t len=strlen(DecodedResult);
+						DecodedResult[len]=' ';
+						DecodedResult[len+1]=0;
+						finderend++;
+					}
+					WCHAR *oneWord=0;
+					if(ConvertStringToUnicode(DecodedResult,cp,&oneWord)){
+						size_t len = wcslen(oneWord);
+						memcpy(&tempstore[outind],oneWord,len*sizeof(WCHAR));
+						outind += len;
+					}
+					delete oneWord;
+					oneWord = 0;
+					delete[] DecodedResult; DecodedResult = 0;
+					start = finderend;
+				} else if (!EOS(start)) start++;
+			} else if (!EOS(start)) start++;
+		}else{
+NotEncoded:
+			tempstore[outind] = tempstore[start-stream];
+			outind++;
+			if (outind > tempstoreLength) break;
+			start++;
+		}
+	}
+	tempstore[outind] = 0;
+	*storeto = tempstore;
+}
diff --git a/plugins/YAMN/mails/m_decode.h b/plugins/YAMN/mails/m_decode.h
new file mode 100644
index 0000000000..e6d2b52fae
--- /dev/null
+++ b/plugins/YAMN/mails/m_decode.h
@@ -0,0 +1,25 @@
+#ifndef __DECODE_H
+#define __DECODE_H
+
+#include "../debug.h"
+
+#define DOTLINE(s)	((((s)[-2]=='\r') || ((s)[-2]=='\n')) && ((s)[-1]=='.') && (((s)[0]=='\r') || ((s)[0]=='\n') || ((s)[0]=='\0')))	// be careful, it's different to ESR's pop3.c ;-)
+#define ENDLINE(s)	(((s)[0]=='\r') || ((s)[0]=='\n'))	//endline
+#define WS(s)		(((s)[0]==' ') || ((s)[0]=='\t'))	//whitespace
+#define ENDLINEWS(s)	((((s)[0]=='\r') || ((s)[0]=='\n')) && (((((s)[1]=='\r') || ((s)[1]=='\n')) && (((s)[2]==' ') || ((s)[2]=='\t'))) || (((s)[1]==' ') || ((s)[1]=='\t'))))	//endline+whitespace: enters(CR or LF and their combinations) followed by space or tab
+#define EOS(s)		((s)[0]==0)				//end of string (stream)
+
+#define CODES(s)	((s[0]=='=') && (s[1]=='?'))			//start of coded string
+#define CODEE(s)	((s[0]=='?') && (s[1]=='='))			//end of coded string
+#define CODED(s)	(s[0]=='?')					//code delimiter
+
+#define MIME_PLAIN	1
+#define	MIME_MAIL	2
+
+struct cptable
+{
+	char *name;
+	unsigned int ID;
+};
+
+#endif
diff --git a/plugins/YAMN/mails/m_mails.h b/plugins/YAMN/mails/m_mails.h
new file mode 100644
index 0000000000..adcaa56a88
--- /dev/null
+++ b/plugins/YAMN/mails/m_mails.h
@@ -0,0 +1,285 @@
+#ifndef __MAILS_H
+#define __MAILS_H
+
+#include <windows.h>
+#include <tchar.h>
+#include "m_account.h"
+
+//
+//================================== OTHER DEFINITIONS ========================================
+//
+
+typedef struct CShortNames
+{
+	char *Value;
+	char *ValueNick;
+	struct CShortNames *Next;	
+} YAMN_MIMESHORTNAMES,*PYAMN_MIMESHORTNAMES;
+
+typedef struct CNames
+{
+	WCHAR *Value;
+	WCHAR *ValueNick;
+	struct CNames *Next;	
+} YAMN_MIMENAMES,*PYAMN_MIMENAMES;
+
+struct CShortHeader
+//this header is used in to get non-unicode data from mime header
+{
+	char *From;
+	char *FromNick;
+	char *ReturnPath;
+	char *ReturnPathNick;
+	char *Subject;
+	PYAMN_MIMESHORTNAMES To;
+	PYAMN_MIMESHORTNAMES Cc;
+	PYAMN_MIMESHORTNAMES Bcc;
+	char *Date;
+	char Priority;
+	char *Body;
+
+	int CP;
+
+	CShortHeader() {}
+	~CShortHeader() {}
+};
+
+struct CHeader
+//this header is used in miranda to store final results of mime reading in Unicode
+{
+	WCHAR *From;
+	WCHAR *FromNick;
+	WCHAR *ReturnPath;
+	WCHAR *ReturnPathNick;
+	WCHAR *Subject;
+	PYAMN_MIMENAMES To;
+	PYAMN_MIMENAMES Cc;
+	PYAMN_MIMENAMES Bcc;
+	WCHAR *Date;
+	TCHAR Priority;
+	WCHAR *Body;
+
+	CHeader() {}
+	~CHeader() {}
+};
+
+struct CMimeItem
+{
+	char *name;
+	char *value;
+	struct CMimeItem *Next;
+	CMimeItem(): name(NULL), value(NULL), Next(NULL){}
+};
+
+typedef struct CMailData	//this is plugin-independent
+{
+#define	YAMN_MAILDATAVERSION	3
+
+	DWORD Size;
+	int CP;
+
+	struct CMimeItem *TranslatedHeader;		//MIME items
+	struct CMimeItem *Additional;			//MIME items not read from server (custom, for filter plugins etc.)
+	char *Body;								//Message body
+
+	CMailData(): CP(-1), Size(0), TranslatedHeader(NULL), Body(NULL){}
+} MAILDATA,*PMAILDATA;
+
+typedef struct CMimeMsgQueue
+{
+#define YAMN_MAILVERSION		3
+	char *ID;								//The ID of mail. This ID identifies every mail in the account, so plugin should set it
+
+	DWORD Number;
+
+#define YAMN_MSG_ANY			0xffffffff	//any mail
+
+//The difference between new and unseen: when new mail is found in account, it becomes unseen and new. But in the next check, if the same mail is found, it is not new.
+//However, when user was not near computer, he does not know about this mail- it is unseen. After user accepts, that he saw new mails, it becomes seen.
+#define YAMN_MSG_NEW			0x80000000	//this mail is new
+#define YAMN_MSG_UNSEEN			0x40000000	//this mail is mailbrowser unseen
+#define YAMN_MSG_DISPLAY		0x20000000	//this mail can be displayed in mailbrowser
+#define YAMN_MSG_POPUP			0x10000000	//this mail can be displayed in popup and can invoke a popup
+#define YAMN_MSG_SYSTRAY		0x08000000	//this mail can invoke systray icon
+#define	YAMN_MSG_BROWSER		0x04000000	//this mail can run mailbrowser
+#define	YAMN_MSG_DISPLAYC		0x02000000	//this mail is inserted to browser mail counter system (the "Account - xx new mails, yy total" phrase)
+#define	YAMN_MSG_POPUPC			0x01000000	//this mail is inserted to popup counter system (the "Account - xx new mails, yy total" phrase)
+
+#define YAMN_MSG_SOUND			0x00800000	//this mail can "play sound"
+#define YAMN_MSG_APP			0x00400000	//this mail can "launch application"
+#define	YAMN_MSG_NEVENT			0x00100000	//this mail can launch Miranda "new mail" event
+
+#define	YAMN_MSG_VIRTUAL		0x00080000	//this mail is not real- does not exists
+
+#define YAMN_MSG_FILTERED		0x00040000	//this mail has been filtered
+
+#define YAMN_MSG_DELETETRASH	0x00020000	//this mail should be moved to the trash bin rather than really deleting from mailbox (this is only switch doing nothing, perhaps usefull for filter plugins)
+#define YAMN_MSG_DELETED		0x00010000	//this mail is already deleted from server (also must be set virtual flag)  (when doing synchronizations between 2 queues, YAMN then does not touch this mail)
+#define YAMN_MSG_MEMDELETE		0x00008000	//this mail will be deleted immidiatelly from memory (and disk) when deleted from server (some opposite of YAMN_MSG_DELETED)
+#define YAMN_MSG_USERDELETE		0x00004000	//this mail is about to delete from server (user deletes manually)
+#define YAMN_MSG_AUTODELETE		0x00002000	//this mail is about to delete from server (plugin marks it for deleting)
+#define YAMN_MSG_DELETEOK		0x00001000	//this mail is confirmed to delete (this flag must be set to delete this mail)
+
+#define YAMN_MSG_BODYREQUESTED	0x00000800	//user requested (part of) the body. In POP3 it should be (TOP <nr> <lines>)
+#define YAMN_MSG_BODYRECEIVED	0x00000200	//(part of) the body.received;
+#define YAMN_MSG_STAYUNSEEN		0x00000400	//this mail stays unseen while user does not really see it
+
+#define YAMN_MSG_DELETE			(YAMN_MSG_USERDELETE | YAMN_MSG_AUTODELETE)
+
+#define YAMN_MSG_NORMALNEW		(YAMN_MSG_NEW | YAMN_MSG_UNSEEN | YAMN_MSG_BROWSER | YAMN_MSG_DISPLAY | YAMN_MSG_DISPLAYC | YAMN_MSG_POPUP | YAMN_MSG_POPUPC | YAMN_MSG_SYSTRAY | YAMN_MSG_SOUND | YAMN_MSG_APP | YAMN_MSG_NEVENT | YAMN_MSG_MEMDELETE | YAMN_MSG_STAYUNSEEN)
+
+#define YAMN_MSG_FLAGSSET(maildata,flag)	((maildata & flag)==flag)
+
+#define YAMN_MSG_SPAML1			1			//spam level 1: notify, show in another color in mail browser
+#define YAMN_MSG_SPAML2			2			//spam level 2: do not notify, show in another color in mail browser
+#define YAMN_MSG_SPAML3			3			//spam level 3: delete, show in another color in mail browser that it was deleted, you do not need to set YAMN_MSG_AUTODELETE
+#define YAMN_MSG_SPAML4			4			//spam level 4: delete, do not show, you do not need to set YAMN_MSG_AUTODELETE
+#define YAMN_MSG_SPAMMASK		0x0000000F
+
+#define YAMN_MSG_SPAML(maildata,level)		((maildata & YAMN_MSG_SPAMMASK)==level)
+	DWORD Flags;
+//Plugins can read mail data, but it can be NULL!!! So plugin should use Load and Save services to load or save data and Unload to release data from memory
+	PMAILDATA MailData;
+//Here YAMN stores its own informations about this mail. Not usefull for plugins...
+//	void *YAMNData;
+	HWND MsgWindow;
+//plugins can store here its own data
+	void *PluginData;
+
+	CMimeMsgQueue(): ID(NULL), Number(0), Flags(0), MailData(NULL), MsgWindow(NULL), PluginData(NULL), Next(NULL){}
+	~CMimeMsgQueue(){}
+
+	struct CMimeMsgQueue *Next;
+} YAMNMAIL,*HYAMNMAIL;
+
+#define	LoadedMailData(x)	(x->MailData!=NULL)
+
+//
+//================================== YAMN MAIL SERVICES ==================================
+//
+
+//CreateAccountMail Service
+//Your plugin should call this to create new mail for your plugin.
+//WPARAM- (HACCOUNT) Account handle
+//LPARAM- CMailData version (use YAMN_MAILVERSION definition)
+//returns pointer to (HYAMNMAIL) or pointer to your structure returned from imported NewMailFcnPtr, if implemented
+#define	MS_YAMN_CREATEACCOUNTMAIL	"YAMN/Service/CreateMail"
+#define CreateAccountMail(x)	(HYAMNMAIL)CallService(MS_YAMN_CREATEACCOUNTMAIL,(WPARAM)x,(LPARAM)YAMN_MAILVERSION)
+
+//DeleteAccountMail Service
+//Deletes plugin's mail from memory. You probably won't use this service, because it deletes only account
+//without any synchronization. Use MS_YAMN_DELETEACCOUNT instead. Note that deleting mail is something like "this mail is
+//not more in the account".
+//WPARAM- (HYAMNPROTOPLUGIN) handle of plugin, which is going to delete mail
+//LPARAM- (HYAMNMAIL) mail going to delete
+//returns zero if failed, otherwise returns nonzero
+#define	MS_YAMN_DELETEACCOUNTMAIL	"YAMN/Service/DeletePluginMail"
+#define DeleteAccountMail(x,y)	CallService(MS_YAMN_DELETEACCOUNTMAIL,(WPARAM)x,(LPARAM)y)
+
+//LoadMailData Service
+//This service loads mail from standard YAMN storage (now it is 1 file, from which mails are loaded once at startup, but
+//in the future it can be Miranda profile file or separate file (1 file per 1 mail). It depends on YAMN implementation...
+//Use this function if you want to read or write to MailData member of mail structure. Please use synchronization obejcts
+//before calling this service (so you must have read or write access to mails)
+//WPARAM- (HYAMNMAIL) mail where to load data
+//LPARAM- (DWORD) version of MAILDATA structure (use YAMN_MAILDATAVERSION definition)
+//returns pointer to new allocated MailData structure (the same value as MailData member)
+#define MS_YAMN_LOADMAILDATA		"YAMN/Service/LoadMailData"
+#define LoadMailData(x)		(PMAILDATA)CallService(MS_YAMN_LOADMAILDATA,(WPARAM)x,(LPARAM)YAMN_MAILDATAVERSION)
+
+//UnloadMailData Service
+//This service frees mail data from memory. It does not care if data were saved or not. So you should save mail before you
+//release data from memory.
+//WPARAM- (HYAMNMAIL) mail whose data are about to free
+//LPARAM- nothing yet
+//returns nonzero if success
+#define MS_YAMN_UNLOADMAILDATA		"YAMN/Service/UnloadMailData"
+#define UnloadMailData(x)	CallService(MS_YAMN_UNLOADMAILDATA,(WPARAM)x,(LPARAM)0)
+
+//SaveMailData Service
+//This service saves mail to standard YAMN storage (when using now 1 book file, it does nothing, because save is done when
+//using MS_YAMN_WRITEACCOUNT service. In the future, mail can be saved to Miranda profile or to separate file...)
+//WPARAM- (HYAMNMAIL) mail to save
+//LPARAM- (DWORD) version of MAILDATA structure (use YAMN_MAILDATAVERSION definition)
+//returns ZERO! if succes
+#define MS_YAMN_SAVEMAILDATA		"YAMN/Service/SaveMailData"
+#define SaveMailData(x)		CallService(MS_YAMN_SAVEMAILDATA,(WPARAM)x,(LPARAM)YAMN_MAILDATAVERSION)
+
+//
+//================================== FUNCTIONS DEFINITIONS ========================================
+//
+
+//typedef void (WINAPI *YAMN_SENDMESSAGEFCN)(UINT,WPARAM,LPARAM);
+typedef void (WINAPI *YAMN_SYNCHROMIMEMSGSFCN)(HACCOUNT,HYAMNMAIL *,HYAMNMAIL *,HYAMNMAIL *,HYAMNMAIL *);
+typedef void (WINAPI *YAMN_TRANSLATEHEADERFCN)(char *,int,struct CMimeItem **);
+typedef void (WINAPI *YAMN_APPENDQUEUEFCN)(HYAMNMAIL,HYAMNMAIL);
+typedef void (WINAPI *YAMN_DELETEMIMEQUEUEFCN)(HACCOUNT,HYAMNMAIL);
+typedef void (WINAPI *YAMN_DELETEMIMEMESSAGEFCN)(HYAMNMAIL *,HYAMNMAIL,int);
+typedef HYAMNMAIL (WINAPI *YAMN_FINDMIMEMESSAGEFCN)(HYAMNMAIL,char *);
+typedef HYAMNMAIL (WINAPI *YAMN_CREATENEWDELETEQUEUEFCN)(HYAMNMAIL);
+typedef void (WINAPI *YAMN_SETREMOVEQUEUEFLAGSFCN)(HYAMNMAIL,DWORD,DWORD,DWORD,int);
+
+//
+//================================== QUICK FUNCTION CALL DEFINITIONS ========================================
+//
+
+//These are defininitions for YAMN exported functions. Your plugin can use them.
+//pYAMNFcn is global variable, it is pointer to your structure containing YAMN functions.
+//It is something similar like pluginLink variable in Miranda plugin. If you use
+//this name of variable, you have already defined these functions and you can use them.
+//It's similar to Miranda's CreateService function.
+
+//How to use YAMN functions:
+//Create a structure containing pointer to functions you want to use in your plugin
+//This structure can look something like this:
+//
+//	struct
+//	{
+//		YAMN_SYNCHROMIMEMSGSFCN	SynchroMessagesFcn;
+//		YAMN_APPENDQUEUEFCN	AppendQueueFcn;
+//	} *pYAMNMailFcn;
+//
+//then you have to fill this structure with pointers...
+//you have to use YAMN service to get pointer, like this (I wrote here all functions you may need,
+//you can copy to your sources only those you need):
+//
+//	pYAMNMailFcn->SynchroMessagesFcn=(YAMN_SYNCHROMIMEMSGSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SYNCHROMIMEMSGSID,(LPARAM)0);
+//	pYAMNMailFcn->TranslateHeaderFcn=(YAMN_TRANSLATEHEADERFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_TRANSLATEHEADERID,(LPARAM)0);
+//	pYAMNMailFcn->AppendQueueFcn=(YAMN_APPENDQUEUEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_APPENDQUEUEID,(LPARAM)0);
+//	pYAMNMailFcn->DeleteMessagesToEndFcn=(YAMN_DELETEMIMEQUEUEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_DELETEMIMEQUEUEID,(LPARAM)0);
+//	pYAMNMailFcn->DeleteMessageFromQueueFcn=(YAMN_DELETEMIMEMESSAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_DELETEMIMEMESSAGEID,(LPARAM)0);
+//	pYAMNMailFcn->FindMessageByIDFcn=(YAMN_FINDMIMEMESSAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_FINDMIMEMESSAGEID,(LPARAM)0);
+//	pYAMNMailFcn->CreateNewDeleteQueueFcn=(YAMN_CREATENEWDELETEQUEUEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_CREATENEWDELETEQUEUEID,(LPARAM)0);
+//	pYAMNMailFcn->SetRemoveQueueFlagsFcn=(YAMN_SETREMOVEQUEUEFLAGSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SETREMOVEQUEUEFLAGSID,(LPARAM)0);
+//
+//
+//and in your plugin just simply use e.g.:
+//
+//	DeleteMIMEQueue(MyAccount,OldMessages);		//this command deletes all messages in the mail queue OldMessages
+//
+
+#define	YAMN_SYNCHROMIMEMSGSID		"YAMN/SynchroMessages"
+#define	YAMN_TRANSLATEHEADERID		"YAMN/TranslateHeader"
+#define	YAMN_APPENDQUEUEID		"YAMN/AppendQueue"
+#define	YAMN_DELETEMIMEQUEUEID		"YAMN/DeleteMIMEQueue"
+#define	YAMN_DELETEMIMEMESSAGEID	"YAMN/DeleteMIMEMessage"
+#define	YAMN_FINDMIMEMESSAGEID		"YAMN/FindMIMEMessageByID"
+#define	YAMN_CREATENEWDELETEQUEUEID	"YAMN/CreateNewDeleteQueue"
+#define	YAMN_SETREMOVEQUEUEFLAGSID	"YAMN/SetRemoveQueueFlags"
+
+#define YAMN_FLAG_REMOVE	0
+#define YAMN_FLAG_SET		1
+
+
+#define SynchroMessages(a,b,c,d,e)	pYAMNMailFcn->SynchroMessagesFcn(a,b,c,d,e)
+#define TranslateHeader(a,b,c)		pYAMNMailFcn->TranslateHeaderFcn(a,b,c)
+#define AppendQueue(x,y)		pYAMNMailFcn->AppendQueueFcn(x,y)
+#define DeleteMIMEQueue(x,y)		pYAMNMailFcn->DeleteMessagesToEndFcn(x,y)
+#define DeleteMIMEMessage(x,y)		pYAMNMailFcn->DeleteMessageFromQueueFcn(x,y,0)
+#define DeleteMIMEMessageEx(x,y,z)	pYAMNMailFcn->DeleteMessageFromQueueFcn(x,y,z)
+#define FindMIMEMessageByID(x,y)	pYAMNMailFcn->FindMessageByIDFcn(x,y)
+#define CreateNewDeleteQueue(x)		pYAMNMailFcn->CreateNewDeleteQueueFcn(x)
+#define SetQueueFlags(a,b,c,d)		pYAMNMailFcn->SetRemoveQueueFlagsFcn(a,b,c,d,1)
+#define RemoveQueueFlags(a,b,c,d)	pYAMNMailFcn->SetRemoveQueueFlagsFcn(a,b,c,d,0)
+
+#endif
diff --git a/plugins/YAMN/mails/mails.cpp b/plugins/YAMN/mails/mails.cpp
new file mode 100644
index 0000000000..b99a9fd560
--- /dev/null
+++ b/plugins/YAMN/mails/mails.cpp
@@ -0,0 +1,499 @@
+/*
+ * This code implements retrieving info from MIME header 
+ *
+ * (c) majvan 2002-2004
+ */
+
+#pragma warning( disable : 4290 )
+#include "../yamn.h"
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+// SMALL INTRO
+// Mails are queued in a queue (chained list). Pointer to first mail is pointed from Account structure
+// member called Mails.
+// Mail queue is ended with NULL- pointered mail (NULL handle)
+
+//Creates new mail for plugin (calling plugin's constructor, when plugin imported to YAMN)
+INT_PTR CreateAccountMailSvc(WPARAM wParam,LPARAM lParam);
+
+//Deletes mail for plugin (calling plugin's destructor, when plugin imported to YAMN)
+INT_PTR DeleteAccountMailSvc(WPARAM wParam,LPARAM lParam);
+
+//Loads mail data from standard storage to memory
+INT_PTR LoadMailDataSvc(WPARAM wParam,LPARAM lParam);
+
+//Deletes mail data from memory
+INT_PTR UnloadMailDataSvc(WPARAM wParam,LPARAM);
+
+//Saves mail data from memory to standard storage
+INT_PTR SaveMailDataSvc(WPARAM wParam,LPARAM lParam);
+
+//Appends second MIME mail queue to the first one
+//Only finds the end of first queue and its Next memember repoints to second one
+void WINAPI AppendQueueFcn(HYAMNMAIL first,HYAMNMAIL second);
+
+//Synchronizes two accounts
+//Function finds, if there were some mails deleted from mailbox and deletes (depends on RemovedOld param) them from OldQueue
+//Next finds, if there are new mails. Mails that are still on mailbox are deleted (depends on RemovedNew param) from NewQueue
+//After this, OldQueue is pointer to mails that are on mailbox, but not new mails
+//and NewQueue contains new mails in account
+//New accounts can be then appended to account mails queue, but they have set the New flag
+//
+//Two mails equals if they have the same ID
+//
+// hPlugin- handle of plugin going to delete mails
+// OldQueue- queue of mails that we found on mailbox last time, after function finishes queue contains all mails except new ones
+// RemovedOld- queue of mails where to store removed mails from OldQueue, if NULL deletes mails from OldQueue
+// NewQueue- queue of mails that we found on mailbox (all mails), after function finishes queue contains only new mails
+// RemovedNew- queue of mails where to store removed mails from NewQueue, if NULL deletes mails from NewQueue
+//So function works like:
+//1. delete (or move to RemovedOld queue if RemovedOld is not NULL) all mails from OldQueue not found in NewQueue
+//2. delete (or move to RemovedNew queue if RemovedNew is not NULL) all mails from NewQueue found in OldQueue
+void WINAPI SynchroMessagesFcn(HACCOUNT Account,HYAMNMAIL *OldQueue,HYAMNMAIL *RemovedOld,HYAMNMAIL *NewQueue,HYAMNMAIL *RemovedNew);
+
+//Deletes messages from mail From to the end
+// Account- account who owns mails
+// From- first mail in queue, which is going to delete
+void WINAPI DeleteMessagesToEndFcn(HACCOUNT Account,HYAMNMAIL From);
+
+//Removes message from queue, does not delete from memory
+// From- queue pointer
+// Which- mail to delete
+// mode- nonzero if you want to decrement numbers in messages that are bigger than the one in Which mail, 0 if not
+void WINAPI DeleteMessageFromQueueFcn(HYAMNMAIL *From,HYAMNMAIL Which,int mode);
+
+//Finds message in queue that has the same ID number
+// From- message queue
+// ID- pointer to ID
+// returns pointer to found message, NULL if not found
+HYAMNMAIL WINAPI FindMessageByIDFcn(HYAMNMAIL From,char *ID);
+
+//Translate header from text to queue of CMimeItem structures
+//This means that new queue will contain all info about headers
+// stream- pointer to text containing header (can be ended with zero)
+// len- length of stream
+// head- function fills this pointer to first header item in queue
+void WINAPI TranslateHeaderFcn(char *stream,int len,struct CMimeItem **head);
+
+//Creates new mail queue, copying only these mails, that have set flag for deleting
+// From- message queue, whose mail with given flag are duplicated
+// returns new mail queue (or NULL when no mail with flag is in From queue)
+//Function does not copy the whole mails, it copies only ID string. And ID is copied as string, so
+//you can use this fcn only if you have your ID as pointer to char string ended with zero character
+HYAMNMAIL WINAPI CreateNewDeleteQueueFcn(HYAMNMAIL From);
+
+//Sets/removes flags from specific mails
+// From- pointer to first message
+// FlagsSet- mail must have set these flags...
+// FlagsNotSet- ...and must not have set these flags...
+// FlagsToSetRemove- ...to set/remove these flags (see mode)
+// mode- nonzero to set, else remove
+void WINAPI SetRemoveFlagsInQueueFcn(HYAMNMAIL From,DWORD FlagsSet,DWORD FlagsNotSet,DWORD FlagsToSetRemove,int mode);
+
+struct CExportedFunctions MailExportedFcn[]=
+{
+	{YAMN_SYNCHROMIMEMSGSID,(void *)SynchroMessagesFcn},
+	{YAMN_TRANSLATEHEADERID,(void *)TranslateHeaderFcn},
+	{YAMN_APPENDQUEUEID,(void *)AppendQueueFcn},
+	{YAMN_DELETEMIMEQUEUEID,(void *)DeleteMessagesToEndFcn},
+	{YAMN_DELETEMIMEMESSAGEID,(void *)DeleteMessageFromQueueFcn},
+	{YAMN_FINDMIMEMESSAGEID,(void *)FindMessageByIDFcn},
+	{YAMN_CREATENEWDELETEQUEUEID,(void *)CreateNewDeleteQueueFcn},
+	{YAMN_SETREMOVEQUEUEFLAGSID,(void *)SetRemoveFlagsInQueueFcn},
+};
+
+struct CExportedServices MailExportedSvc[]=
+{
+	{MS_YAMN_CREATEACCOUNTMAIL,CreateAccountMailSvc},
+	{MS_YAMN_DELETEACCOUNTMAIL,DeleteAccountMailSvc},
+	{MS_YAMN_LOADMAILDATA,LoadMailDataSvc},
+	{MS_YAMN_UNLOADMAILDATA,UnloadMailDataSvc},
+	{MS_YAMN_SAVEMAILDATA,SaveMailDataSvc},
+};
+
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+INT_PTR CreateAccountMailSvc(WPARAM wParam,LPARAM lParam)
+{
+	HACCOUNT Account=(HACCOUNT)wParam;
+	DWORD MailVersion=(DWORD)lParam;
+	HYAMNMAIL NewMail;
+
+//test if we are going to initialize members of suitable structure (structures of plugin and YAMN must match)
+	if(MailVersion!=YAMN_MAILVERSION)
+		return NULL;
+
+	if(Account->Plugin!=NULL)
+	{
+		if(Account->Plugin->MailFcn->NewMailFcnPtr!=NULL)
+		{
+//Let plugin create its own structure, which can be derived from CAccount structure
+			if(NULL==(NewMail=Account->Plugin->MailFcn->NewMailFcnPtr(Account,YAMN_MAILVERSION)))
+				return NULL;
+		}
+		else
+		{
+//We suggest plugin uses standard CAccount structure, so we create it
+			if(NULL==(NewMail=new YAMNMAIL))
+//If not created successfully
+				return NULL;
+			NewMail->MailData=NULL;
+		}
+//Init every members of structure, used by YAMN
+		return (INT_PTR)NewMail;
+	}
+	return NULL;
+}
+
+INT_PTR DeleteAccountMailSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+	HYAMNMAIL OldMail=(HYAMNMAIL)lParam;
+	struct CMimeItem *TH;
+
+	if(Plugin->MailFcn!=NULL){
+		if(Plugin->MailFcn->DeleteMailFcnPtr!=NULL) {
+			//Let plugin delete its own CMimeMsgQueue derived structure
+			Plugin->MailFcn->DeleteMailFcnPtr(OldMail);
+			return 1;
+		}
+	}
+	if(OldMail->MailData!=NULL) {
+		if(OldMail->MailData->Body!=NULL)
+			delete[] OldMail->MailData->Body;
+		if((TH=OldMail->MailData->TranslatedHeader)!=NULL)
+			for(;OldMail->MailData->TranslatedHeader!=NULL;) {
+				TH=TH->Next;
+				if(OldMail->MailData->TranslatedHeader->name!=NULL)
+					delete[] OldMail->MailData->TranslatedHeader->name;
+				if(OldMail->MailData->TranslatedHeader->value!=NULL)
+					delete[] OldMail->MailData->TranslatedHeader->value;
+				delete OldMail->MailData->TranslatedHeader;
+				OldMail->MailData->TranslatedHeader=TH;
+			}
+		delete OldMail->MailData;
+	}
+	if(OldMail->ID!=NULL)
+		delete[] OldMail->ID;
+
+	delete OldMail;				//consider mail as standard HYAMNMAIL, not initialized before and use its own destructor
+	return 1;
+}
+
+
+void WINAPI AppendQueueFcn(HYAMNMAIL first,HYAMNMAIL second)
+{
+	HYAMNMAIL Finder=first;
+	while(Finder->Next!=NULL) Finder=Finder->Next;
+	Finder->Next=second;
+}
+
+INT_PTR LoadMailDataSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNMAIL Mail=(HYAMNMAIL)wParam;
+	DWORD MailVersion=(DWORD)lParam;
+
+	if(MailVersion!=YAMN_MAILDATAVERSION)
+		return NULL;
+
+//now we have all data to memory persisting, so no loading is needed
+	return (INT_PTR)Mail->MailData;
+}
+
+INT_PTR UnloadMailDataSvc(WPARAM wParam,LPARAM)
+{
+	HYAMNMAIL Mail=(HYAMNMAIL)wParam;
+
+//now we should delete structure from memory, but it will be made in future YAMN version
+	return 1;
+}
+
+INT_PTR SaveMailDataSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNMAIL Mail=(HYAMNMAIL)wParam;
+	DWORD MailVersion=(DWORD)lParam;
+
+	if(MailVersion!=YAMN_MAILDATAVERSION)
+		return (INT_PTR)-1;
+
+//now we have all data to memory persisting, so no saving is needed
+	return (INT_PTR)0;
+}
+
+void WINAPI SynchroMessagesFcn(HACCOUNT Account,HYAMNMAIL *OldQueue,HYAMNMAIL *RemovedOld,HYAMNMAIL *NewQueue,HYAMNMAIL *RemovedNew)
+//deletes messages from new queue, if they are old
+//it also deletes messages from old queue, if they are not in mailbox anymore
+//"YAMN_MSG_DELETED" messages in old queue remain in old queue (are never removed, although they are not in new queue)
+//"YAMN_MSG_DELETED" messages in new queue remain in new queue (are never removed, although they can be in old queue)
+{
+	HYAMNMAIL Finder,FinderPrev;
+	HYAMNMAIL Parser,ParserPrev;
+	HYAMNMAIL RemovedOldParser =NULL;
+	HYAMNMAIL RemovedNewParser =NULL;
+	if(RemovedOld!=NULL) *RemovedOld=NULL;
+	if(RemovedNew!=NULL) *RemovedNew=NULL;
+
+	for(FinderPrev=NULL,Finder=*OldQueue;Finder!=NULL;)
+	{
+		if(Finder->Flags & YAMN_MSG_DELETED)			//if old queue contains deleted mail
+		{
+			FinderPrev=Finder;
+			Finder=Finder->Next;						//get next message in old queue for testing
+			continue;
+		}
+		for(ParserPrev=NULL,Parser=*NewQueue;Parser!=NULL;ParserPrev=Parser,Parser=Parser->Next)
+		{
+			if(Parser->Flags & YAMN_MSG_DELETED)
+				continue;
+
+			if(Parser->ID==NULL)						//simply ignore the message, that has not filled its ID
+				continue;
+
+			if(0==strcmp(Parser->ID,Finder->ID))		//search for equal message in new queue
+				break;
+		}
+		if(Parser!=NULL)								//found equal message in new queue
+		{
+			if(Parser==*NewQueue)
+				*NewQueue=(*NewQueue)->Next;
+			else
+				ParserPrev->Next=Parser->Next;
+			Finder->Number=Parser->Number;				//rewrite the number of current message in old queue
+
+			if(RemovedNew==NULL)						//delete from new queue
+				DeleteAccountMailSvc((WPARAM)Account->Plugin,(LPARAM)Parser);
+			else										//or move to RemovedNew
+			{
+				if(RemovedNewParser==NULL)				//if it is first mail removed from NewQueue
+					*RemovedNew=Parser;					//set RemovedNew queue to point to first message in removed queue
+				else
+					RemovedNewParser->Next=Parser;		//else don't forget to show to next message in RemovedNew queue
+				RemovedNewParser=Parser;				//follow RemovedNew queue
+				RemovedNewParser->Next=NULL;
+			}
+			FinderPrev=Finder;
+			Finder=Finder->Next;						//get next message in old queue for testing
+		}
+		else											//a message was already deleted from mailbox
+		{
+			if(Finder==*OldQueue)						//if we are at the first item in OldQueue
+			{
+				*OldQueue=(*OldQueue)->Next;			//set OldQueue to next item
+				if(RemovedOld==NULL)					//delete from old queue
+					DeleteAccountMailSvc((WPARAM)Account->Plugin,(LPARAM)Finder);
+				else									//or move to RemovedOld
+				{
+					if(RemovedOldParser==NULL)			//if it is first mail removed from OldQueue
+						*RemovedOld=Finder;				//set RemovedOld queue to point to first message in removed queue
+					else
+						RemovedOldParser->Next=Finder;	//else don't forget to show to next message in RemovedNew queue
+					RemovedOldParser=Finder;			//follow RemovedOld queue
+					RemovedOldParser->Next=NULL;
+				}
+				Finder=*OldQueue;
+			}
+			else
+			{
+				FinderPrev->Next=Finder->Next;
+				if(RemovedOld==NULL)					//delete from old queue
+					DeleteAccountMailSvc((WPARAM)Account->Plugin,(LPARAM)Finder);
+				else									//or move to RemovedOld
+				{
+					if(RemovedOldParser==NULL)			//if it is first mail removed from OldQueue
+						*RemovedOld=Finder;				//set RemovedOld queue to point to first message in removed queue
+					else
+						RemovedOldParser->Next=Finder;	//else don't forget to show to next message in RemovedNew queue
+					RemovedOldParser=Finder;			//follow RemovedOld queue
+					RemovedOldParser->Next=NULL;
+				}
+				Finder=FinderPrev->Next;
+			}
+		}
+	}
+}
+
+void WINAPI DeleteMessagesToEndFcn(HACCOUNT Account,HYAMNMAIL From)
+{
+	HYAMNMAIL Temp;
+	while(From!=NULL)
+	{
+		Temp=From;
+		From=From->Next;
+		DeleteAccountMailSvc((WPARAM)Account->Plugin,(LPARAM)Temp);
+	}
+}
+
+void WINAPI DeleteMessageFromQueueFcn(HYAMNMAIL *From,HYAMNMAIL Which,int mode=0)
+{
+	DWORD Number=Which->Number;
+	HYAMNMAIL Parser;
+
+	if(*From==Which)
+	{
+		Parser=Which->Next;
+		*From=Parser;
+	}
+	else 
+	{
+		for(Parser=*From;Which!=Parser->Next;Parser=Parser->Next)
+			if(mode && (Parser->Number>Number)) Parser->Number--;
+		if(mode && (Parser->Number>Number)) Parser->Number--;
+		Parser->Next=Parser->Next->Next;
+		Parser=Which->Next;
+	}	
+	if(mode)
+		for(;Parser!=NULL;Parser=Parser->Next)
+			if(Parser->Number>Number) Parser->Number--;
+}
+
+void DeleteMessagesFromQueue(HYAMNMAIL *From,HYAMNMAIL Which,int mode=0)
+{
+	HYAMNMAIL Parser;
+
+	for(Parser=Which;Parser!=NULL;Parser=Parser->Next)
+		DeleteMessageFromQueueFcn(From,Parser,mode);
+}
+
+HYAMNMAIL WINAPI FindMessageByIDFcn(HYAMNMAIL From,char *ID)
+{
+	HYAMNMAIL Browser;
+
+	for(Browser=From;Browser!=NULL;Browser=Browser->Next)
+		if(0==lstrcmp(Browser->ID,ID))
+			break;
+	return Browser;
+}
+
+void WINAPI TranslateHeaderFcn(char *stream,int len,struct CMimeItem **head)
+{
+	try
+	{
+		char *finder=stream;
+		char *prev1,*prev2,*prev3;
+		struct CMimeItem *Item=NULL;
+
+		while(finder<=(stream+len))
+		{
+			while(ENDLINEWS(finder)) finder++;
+
+			//at the start of line
+			if(DOTLINE(finder+1))					//at the end of stream
+				break;
+
+			prev1=finder;
+
+			while(*finder!=':' && !EOS(finder)) finder++;
+			if(!EOS(finder))
+				prev2=finder++;
+			else
+				break;
+
+			while(WS(finder) && !EOS(finder)) finder++;
+			if(!EOS(finder))
+				prev3=finder;
+			else
+				break;
+
+			do
+			{
+				if(ENDLINEWS(finder)) finder+=2;						//after endline information continues
+				while(!ENDLINE(finder) && !EOS(finder)) finder++;
+			}while(ENDLINEWS(finder));
+
+			if(Item!=NULL)
+			{
+				if(NULL==(Item->Next=new struct CMimeItem))
+					break;
+				Item=Item->Next;
+			}
+			else
+			{
+				Item = new CMimeItem;
+				*head = Item;
+			}
+
+			Item->Next=NULL;
+			Item->name=new char [prev2-prev1+1];
+			lstrcpyn(Item->name,prev1,prev2-prev1+1);
+			Item->value=new char [finder-prev3+1];
+			lstrcpyn(Item->value,prev3,finder-prev3+1);
+
+			if(EOS(finder))
+				break;
+			finder++;
+			if(ENDLINE(finder)) {
+				finder++;
+				if(ENDLINE(finder)) {
+					// end of headers. message body begins
+					finder++;
+					if(ENDLINE(finder))finder++;
+					prev1 = finder;
+					while (!DOTLINE(finder+1))finder++;
+					if (ENDLINE(finder))finder--;
+					prev2 = finder;
+					if (prev2>prev1){ // yes, we have body
+						if(NULL==(Item->Next=new struct CMimeItem))	break; // Cant create new item?!
+						Item=Item->Next;
+						Item->Next=NULL;//just in case;
+						Item->name=new char[5]; strncpy(Item->name,"Body",5);
+						Item->value=new char [prev2-prev1];
+						lstrcpyn(Item->value,prev1,prev2-prev1-1);
+					}
+					break; // there is nothing else
+				}
+			}
+		}
+	}
+	catch(...)
+	{
+		MessageBox(NULL,"Translate header error","",0);
+	}
+}
+
+HYAMNMAIL WINAPI CreateNewDeleteQueueFcn(HYAMNMAIL From)
+{
+	HYAMNMAIL FirstMail,Browser;
+
+	for(FirstMail=NULL;From!=NULL;From=From->Next)
+	{
+		if((From->Flags & (YAMN_MSG_USERDELETE | YAMN_MSG_AUTODELETE)) && !(From->Flags & YAMN_MSG_DELETED))
+		{
+			if(FirstMail==NULL)
+			{
+				FirstMail=Browser=new YAMNMAIL;
+				if(FirstMail==NULL)
+					break;
+			}
+			else
+			{
+				Browser->Next=new YAMNMAIL;
+				Browser=Browser->Next;
+			}
+			Browser->ID=new char[strlen(From->ID)+1];
+			strcpy(Browser->ID,From->ID);
+			Browser->Number=From->Number;
+			Browser->Flags=From->Flags;
+		}
+	}
+	return FirstMail;
+}
+
+void WINAPI SetRemoveFlagsInQueueFcn(HYAMNMAIL From,DWORD FlagsSet,DWORD FlagsNotSet,DWORD FlagsToSetRemove,int mode)
+{
+	HYAMNMAIL msgq;
+
+	for(msgq=(HYAMNMAIL)From;msgq!=NULL;msgq=msgq->Next)
+	{
+		if((FlagsSet==(msgq->Flags & FlagsSet)) && (0==(msgq->Flags & FlagsNotSet)))
+		{
+			if(mode)
+				msgq->Flags=msgq->Flags | FlagsToSetRemove;
+			else
+				msgq->Flags=msgq->Flags & ~FlagsToSetRemove;
+		}
+	}
+}
diff --git a/plugins/YAMN/mails/mime.cpp b/plugins/YAMN/mails/mime.cpp
new file mode 100644
index 0000000000..f2364c91c1
--- /dev/null
+++ b/plugins/YAMN/mails/mime.cpp
@@ -0,0 +1,732 @@
+/*
+ * This code implements retrieving info from MIME header
+ *
+ * (c) majvan 2002-2004
+ */
+
+#pragma warning( disable : 4290 )
+#include "../yamn.h"
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+extern SWMRG *AccountBrowserSO;
+extern struct WndHandles *MessageWnd;
+
+extern int GetCharsetFromString(char *input,size_t size);
+extern void SendMsgToRecepients(struct WndHandles *FirstWin,UINT msg,WPARAM wParam,LPARAM lParam);
+extern void ConvertCodedStringToUnicode(char *stream,WCHAR **storeto,DWORD cp,int mode);
+extern DWORD WINAPI MailBrowser(LPVOID Param);
+extern DWORD WINAPI NoNewMailProc(LPVOID Param);
+extern DWORD WINAPI BadConnection(LPVOID Param);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//Copies one string to another
+// srcstart- source string
+// srcend- address to the end of source string
+// dest- pointer that stores new allocated string that contains copy of source string
+// mode- MIME_PLAIN or MIME_MAIL (MIME_MAIL deletes '"' characters (or '<' and '>') if they are at start and end of source string
+void CopyToHeader(char *srcstart,char *srcend,char **dest,int mode);
+
+//Extracts email address (finds nick name and mail and then stores them to strings)
+// finder- source string
+// storeto- pointer that receives address of mail string
+// storetonick- pointer that receives address of nickname
+void ExtractAddressFromLine(char *finder,char **storeto,char **storetonick);
+
+//Extracts simple text from string
+// finder- source string
+// storeto- pointer that receives address of string
+void ExtractStringFromLine(char *finder,char **storeto);
+
+//Extracts some item from content-type string
+//Example: ContentType string: "TEXT/PLAIN; charset=US-ASCII", item:"charset=", returns: "US-ASCII"
+// ContetType- content-type string
+// value- string item
+// returns extracted string (or NULL when not found)
+char *ExtractFromContentType(char *ContentType,char *value);
+
+//Extracts info from header text into header members
+//Note that this function as well as struct CShortHeadwer can be always changed, because there are many items to extract
+//(e.g. the X-Priority and Importance and so on)
+// items- translated header (see TranslateHeaderFcn)
+// head- header to be filled with values extracted from items
+void ExtractShortHeader(struct CMimeItem *items,struct CShortHeader *head);
+
+//Extracts header to mail using ExtractShortHeader fcn.
+// items- translated header (see TranslateHeaderFcn)
+// CP- codepage used when no default found
+// head- header to be filled with values extracted from items, in unicode (wide char)
+void ExtractHeader(struct CMimeItem *items,int &CP,struct CHeader *head);
+
+//Deletes items in CShortHeader structure
+// head- structure whose items are deleted
+void DeleteShortHeaderContent(struct CShortHeader *head);
+
+//Deletes list of YAMN_MIMENAMES structures
+// Names- pointer to first item of list
+void DeleteNames(PYAMN_MIMENAMES Names);
+
+//Deletes list of YAMN_MIMESHORTNAMES structures
+// Names- pointer to first item of list
+void DeleteShortNames(PYAMN_MIMESHORTNAMES Names);
+
+//Makes a string lowercase
+// string- string to be lowercased
+void inline ToLower(char *string);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+void CopyToHeader(char *srcstart,char *srcend,char **dest,int mode)
+{
+	char *dst;
+
+	if(dest==NULL)
+		return;
+	if(srcstart>=srcend)
+		return;
+
+	if((mode==MIME_MAIL) && (((*srcstart=='"') && (*(srcend-1)=='"')) || ((*srcstart=='<') && (*(srcend-1)=='>'))))
+	{
+		srcstart++;
+		srcend--;
+	}
+
+	if(srcstart>=srcend)
+		return;
+
+	if(NULL!=*dest)
+		delete[] *dest;
+	if(NULL==(*dest=new char[srcend-srcstart+1]))
+		return;
+
+	dst=*dest;
+
+	for(;srcstart<srcend;dst++,srcstart++)
+	{
+		if(ENDLINE(srcstart))
+		{
+			while(ENDLINE(srcstart) || WS(srcstart)) srcstart++;
+			*dst=' ';
+			srcstart--;		//because at the end of "for loop" we increment srcstart
+		}
+		else
+			*dst=*srcstart;
+	}
+	*dst=0;
+}
+
+void ExtractAddressFromLine(char *finder,char **storeto,char **storetonick)
+{
+	if(finder==NULL)
+	{
+		*storeto=*storetonick=NULL;
+		return;
+	}
+	while(WS(finder)) finder++;
+	if((*finder)!='<')
+	{
+		char *finderend=finder+1;
+		do
+		{
+			if(ENDLINEWS(finderend))						//after endline information continues
+				finderend+=2;
+			while(!ENDLINE(finderend) && !EOS(finderend)) finderend++;		//seek to the end of line or to the end of string
+		}while(ENDLINEWS(finderend));
+		finderend--;
+		while(WS(finderend) || ENDLINE(finderend)) finderend--;				//find the end of text, no whitespace
+		if(*finderend!='>')						//not '>' at the end of line
+			CopyToHeader(finder,finderend+1,storeto,MIME_MAIL);
+		else								//at the end of line, there's '>'
+		{
+			char *finder2=finderend;
+			while((*finder2!='<') && (finder2>finder)) finder2--;		//go to matching '<' or to the start
+			CopyToHeader(finder2,finderend+1,storeto,MIME_MAIL);
+			if(*finder2=='<')						//if we found '<', the rest copy as from nick
+			{
+				finder2--;
+				while(WS(finder2) || ENDLINE(finder2)) finder2--;		//parse whitespace
+				CopyToHeader(finder,finder2+1,storetonick,MIME_MAIL);		//and store nickname
+			}
+		}
+	}
+	else
+	{
+		char *finderend=finder+1;
+		do
+		{
+			if(ENDLINEWS(finderend))							//after endline information continues
+				finderend+=2;
+			while(!ENDLINE(finderend) && (*finderend!='>') && !EOS(finderend)) finderend++;		//seek to the matching < or to the end of line or to the end of string
+		}while(ENDLINEWS(finderend));
+		CopyToHeader(finder,finderend+1,storeto,MIME_MAIL);				//go to first '>' or to the end and copy
+		finder=finderend+1;
+		while(WS(finder)) finder++;								//parse whitespace
+		if(!ENDLINE(finder) && !EOS(finder))					//if there are chars yet, it's nick
+		{
+			finderend=finder+1;
+			while(!ENDLINE(finderend) && !EOS(finderend)) finderend++;	//seek to the end of line or to the end of string
+			finderend--;
+			while(WS(finderend)) finderend--;				//find the end of line, no whitespace
+			CopyToHeader(finder,finderend+1,storetonick,MIME_MAIL);
+		}
+	}
+}
+
+void ExtractStringFromLine(char *finder,char **storeto)
+{
+	if(finder==NULL)
+	{
+		*storeto=NULL;
+		return;
+	}
+	while(WS(finder)) finder++;
+	char *finderend=finder;
+
+	do
+	{
+		if(ENDLINEWS(finderend)) finderend++;						//after endline information continues
+		while(!ENDLINE(finderend) && !EOS(finderend)) finderend++;
+	}while(ENDLINEWS(finderend));
+	finderend--;
+	while(WS(finderend)) finderend--;				//find the end of line, no whitespace
+	CopyToHeader(finder,finderend+1,storeto,MIME_PLAIN);
+}
+
+char *ExtractFromContentType(char *ContentType,char *value)
+{
+	char *lowered = _strdup(ContentType);
+	ToLower(lowered);
+	char *finder=strstr(lowered,value);
+	if(finder==NULL){
+		free (lowered);
+		return NULL;
+	}
+	finder = finder-lowered+ContentType;
+	free (lowered);
+
+	char *temp,*copier;
+	char *CopiedString;
+
+	temp=finder-1;
+	while((temp>ContentType) && WS(temp)) temp--;			//now we have to find, if the word "Charset=" is located after ';' like "; Charset="
+	if(*temp!=';' && !ENDLINE(temp) && temp!=ContentType)
+		return NULL;
+	finder=finder+strlen(value);						//jump over value string
+
+	while(WS(finder)) finder++;					//jump over whitespaces
+	temp=finder;
+	while(*temp!=0 && *temp!=';') temp++;				//jump to the end of setting (to the next ;)
+	temp--;
+	while(WS(temp))	temp--;						//remove whitespaces from the end
+	if (*finder=='\"'){ //remove heading and tailing quotes
+		finder++;
+		if (*temp=='\"') temp--;
+	}
+	if(NULL==(CopiedString=new char[++temp-finder+1]))
+		return NULL;
+	for(copier=CopiedString;finder!=temp;*copier++=*finder++);			//copy string
+	*copier=0;						//and end it with zero character
+
+	return CopiedString;
+}
+
+void ExtractShortHeader(struct CMimeItem *items,struct CShortHeader *head)
+{
+	for(;items!=NULL;items=items->Next)
+	{
+		//at the start of line
+		//MessageBox(NULL,items->value,items->name,0);
+		if(0==_strnicmp(items->name,"From",4))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting from>");
+			#endif
+			ExtractAddressFromLine(items->value,&head->From,&head->FromNick);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+		else if(0==_strnicmp(items->name,"Return-Path",11))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting return-path>");
+			#endif
+			ExtractAddressFromLine(items->value,&head->ReturnPath,&head->ReturnPathNick);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+		else if(0==_strnicmp(items->name,"Subject",7))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting subject>");
+			#endif
+			ExtractStringFromLine(items->value,&head->Subject);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+		else if(0==_strnicmp(items->name,"Body",4))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting body>");
+			#endif
+			ExtractStringFromLine(items->value,&head->Body);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+		else if(0==_strnicmp(items->name,"Date",4))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting date>");
+			#endif
+			ExtractStringFromLine(items->value,&head->Date);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+		else if(0==_strnicmp(items->name,"Content-Type",12))
+		{
+			if(items->value==NULL)
+				continue;
+
+			char *ContentType=NULL,*CharSetStr;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting Content-Type>");
+			#endif
+			ExtractStringFromLine(items->value,&ContentType);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+			ToLower(ContentType);
+			if(NULL!=(CharSetStr=ExtractFromContentType(ContentType,"charset=")))
+			{
+				head->CP=GetCharsetFromString(CharSetStr,strlen(CharSetStr));
+				delete[] CharSetStr;
+			}
+			delete[] ContentType;
+		}
+		else if(0==_strnicmp(items->name,"Importance",10))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting importance>");
+			#endif
+			if(head->Priority!=-1)
+			{
+				if(0==strncmp(items->value,"low",3))
+					head->Priority=5;
+				else if(0==strncmp(items->value,"normal",6))
+					head->Priority=3;
+				else if(0==strncmp(items->value,"high",4))
+					head->Priority=1;
+			}
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+		else if(0==_strnicmp(items->name,"X-Priority",10))
+		{
+			if(items->value==NULL)
+				continue;
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<X-Priority>");
+			#endif
+			if((*items->value>='1') && (*items->value<='5'))
+				head->Priority=*items->value-'0';
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting>\n");
+			#endif
+		}
+
+	}
+}
+
+void ExtractHeader(struct CMimeItem *items,int &CP,struct CHeader *head)
+{
+	struct CShortHeader ShortHeader;
+
+	ZeroMemory(&ShortHeader,sizeof(struct CShortHeader));
+	ShortHeader.Priority=ShortHeader.CP=-1;
+	#ifdef DEBUG_DECODE
+	DebugLog(DecodeFile,"<Extracting header>\n");
+	#endif
+	ExtractShortHeader(items,&ShortHeader);
+
+	head->Priority=ShortHeader.Priority==-1 ? 3 : ShortHeader.Priority;
+	CP=ShortHeader.CP==-1 ? CP : ShortHeader.CP;
+	#ifdef DEBUG_DECODE
+	if(NULL!=ShortHeader.From)
+		DebugLog(DecodeFile,"<Decoded from>%s</Decoded)\n",ShortHeader.From);
+	if(NULL!=ShortHeader.FromNick)
+		DebugLog(DecodeFile,"<Decoded from-nick>%s</Decoded)\n",ShortHeader.FromNick);
+	if(NULL!=ShortHeader.ReturnPath)
+		DebugLog(DecodeFile,"<Decoded return-path>%s</Decoded)\n",ShortHeader.ReturnPath);
+	if(NULL!=ShortHeader.ReturnPathNick)
+		DebugLog(DecodeFile,"<Decoded return-path nick>%s</Decoded)\n",ShortHeader.ReturnPathNick);
+	if(NULL!=ShortHeader.Subject)
+		DebugLog(DecodeFile,"<Decoded subject>%s</Decoded)\n",ShortHeader.Subject);
+	if(NULL!=ShortHeader.Date)
+		DebugLog(DecodeFile,"<Decoded date>%s</Decoded)\n",ShortHeader.Date);
+	DebugLog(DecodeFile,"</Extracting header>\n");
+	DebugLog(DecodeFile,"<Convert>\n");
+	#endif
+
+	ConvertCodedStringToUnicode(ShortHeader.From,&head->From,CP,MIME_PLAIN);
+
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->From)
+		DebugLogW(DecodeFile,L"<Converted from>%s</Converted>\n",head->From);
+	#endif
+	ConvertCodedStringToUnicode(ShortHeader.FromNick,&head->FromNick,CP,MIME_MAIL);
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->FromNick)
+		DebugLogW(DecodeFile,L"<Converted from-nick>%s</Converted>\n",head->FromNick);
+	#endif
+	ConvertCodedStringToUnicode(ShortHeader.ReturnPath,&head->ReturnPath,CP,MIME_PLAIN);
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->ReturnPath)
+		DebugLogW(DecodeFile,L"<Converted return-path>%s</Converted>\n",head->ReturnPath);
+	#endif
+	ConvertCodedStringToUnicode(ShortHeader.ReturnPathNick,&head->ReturnPathNick,CP,MIME_MAIL);
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->ReturnPathNick)
+		DebugLogW(DecodeFile,L"<Converted return-path nick>%s</Converted>\n",head->ReturnPathNick);
+	#endif
+	ConvertCodedStringToUnicode(ShortHeader.Subject,&head->Subject,CP,MIME_PLAIN);
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->Subject)
+		DebugLogW(DecodeFile,L"<Converted subject>%s</Converted>\n",head->Subject);
+	#endif
+	ConvertCodedStringToUnicode(ShortHeader.Date,&head->Date,CP,MIME_PLAIN);
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->Date)
+		DebugLogW(DecodeFile,L"<Converted date>%s</Converted>\n",head->Date);
+	#endif
+
+	ConvertCodedStringToUnicode(ShortHeader.Body,&head->Body,CP,MIME_PLAIN);
+	#ifdef DEBUG_DECODE
+	if(NULL!=head->Body)
+		DebugLogW(DecodeFile,L"<Converted Body>%s</Converted>\n",head->Body);
+	#endif
+
+	#ifdef DEBUG_DECODE
+	DebugLog(DecodeFile,"</Convert>\n");
+	#endif
+
+	DeleteShortHeaderContent(&ShortHeader);
+
+//	head->From=L"Frommmm";
+//	head->Subject=L"Subject";
+	return;
+}
+
+void DeleteShortHeaderContent(struct CShortHeader *head)
+{
+	if(head->From!=NULL) delete[] head->From;
+	if(head->FromNick!=NULL) delete[] head->FromNick;
+	if(head->ReturnPath!=NULL) delete[] head->ReturnPath;
+	if(head->ReturnPathNick!=NULL) delete[] head->ReturnPathNick;
+	if(head->Subject!=NULL) delete[] head->Subject;
+	if(head->Date!=NULL) delete[] head->Date;
+	if(head->To!=NULL) DeleteShortNames(head->To);
+	if(head->Cc!=NULL) DeleteShortNames(head->Cc);
+	if(head->Bcc!=NULL) DeleteShortNames(head->Bcc);
+	if(head->Body!=NULL) delete[] head->Body;
+}
+
+void DeleteHeaderContent(struct CHeader *head)
+{
+	if(head->From!=NULL) delete[] head->From;
+	if(head->FromNick!=NULL) delete[] head->FromNick;
+	if(head->ReturnPath!=NULL) delete[] head->ReturnPath;
+	if(head->ReturnPathNick!=NULL) delete[] head->ReturnPathNick;
+	if(head->Subject!=NULL) delete[] head->Subject;
+	if(head->Date!=NULL) delete[] head->Date;
+	if(head->Body!=NULL) delete[] head->Body;
+	if(head->To!=NULL) DeleteNames(head->To);
+	if(head->Cc!=NULL) DeleteNames(head->Cc);
+	if(head->Bcc!=NULL) DeleteNames(head->Bcc);
+}
+
+void DeleteNames(PYAMN_MIMENAMES Names)
+{
+	PYAMN_MIMENAMES Parser=Names,Old;
+	for(;Parser!=NULL;Parser=Parser->Next)
+	{
+		if(Parser->Value!=NULL)
+			delete[] Parser->Value;
+		if(Parser->ValueNick!=NULL)
+			delete[] Parser->ValueNick;
+		Old=Parser;
+		Parser=Parser->Next;
+		delete Old;
+	}
+}
+
+void DeleteShortNames(PYAMN_MIMESHORTNAMES Names)
+{
+	PYAMN_MIMESHORTNAMES Parser=Names,Old;
+	for(;Parser!=NULL;Parser=Parser->Next)
+	{
+		if(Parser->Value!=NULL)
+			delete[] Parser->Value;
+		if(Parser->ValueNick!=NULL)
+			delete[] Parser->ValueNick;
+		Old=Parser;
+		Parser=Parser->Next;
+		delete Old;
+	}
+}
+
+
+void inline ToLower(char *string)
+{
+	for(;*string!=0;string++)
+		if(*string>='A' && *string<='Z') *string=*string-'A'+'a';
+}
+
+#define TE_UNKNOWN
+#define TE_QUOTEDPRINTABLE 1
+#define TE_BASE64 2
+struct APartDataType
+{
+	char *Src;//Input
+	char *ContType;
+	int CodePage;
+	char *TransEnc;
+	BYTE TransEncType; //TE_something
+	char *body;
+	int bodyLen;
+	WCHAR *wBody;
+};
+
+
+void ParseAPart(APartDataType *data)
+{
+	size_t len = strlen(data->Src);
+	try
+	{
+		char *finder=data->Src;
+		char *prev1,*prev2,*prev3;
+
+		while(finder<=(data->Src+len))
+		{
+			while(ENDLINEWS(finder)) finder++;
+
+			//at the start of line
+			if (finder>data->Src){
+				if (*(finder-2)=='\r' || *(finder-2)=='\n') 
+					*(finder-2)=0;
+				if (*(finder-1)=='\r' || *(finder-1)=='\n') 
+					*(finder-1)=0;
+			}
+			prev1=finder;
+
+			while(*finder!=':' && !EOS(finder) && !ENDLINE(finder)) finder++;
+			if (ENDLINE(finder)||EOS(finder)){
+				// no ":" in the line? here the body begins;
+				data->body = prev1;
+				break;
+			}
+			prev2=finder++;
+
+			while(WS(finder) && !EOS(finder)) finder++;
+			if(!EOS(finder))
+				prev3=finder;
+			else
+				break;
+
+			do
+			{
+				if(ENDLINEWS(finder)) finder+=2;						//after endline information continues
+				while(!ENDLINE(finder) && !EOS(finder)) finder++;
+			}while(ENDLINEWS(finder));
+
+			if (!_strnicmp(prev1,"Content-type",prev2-prev1)){
+				data->ContType = prev3;
+			} else if (!_strnicmp(prev1,"Content-Transfer-Encoding",prev2-prev1)){
+				data->TransEnc = prev3;
+			}
+
+			if(EOS(finder))
+				break;
+			finder++;
+			if(ENDLINE(finder)) {
+				finder++;
+				if(ENDLINE(finder)) {
+					// end of headers. message body begins
+					if (finder>data->Src){
+						if (*(finder-2)=='\r' || *(finder-2)=='\n') 
+							*(finder-2)=0;
+						if (*(finder-1)=='\r' || *(finder-1)=='\n') 
+							*(finder-1)=0;
+					}
+					finder++;
+					if(ENDLINE(finder))finder++;
+					prev1 = finder;
+					while (!EOS(finder+1))finder++;
+					if (ENDLINE(finder))finder--;
+					prev2 = finder;
+					if (prev2>prev1){ // yes, we have body
+						data->body = prev1;
+					}
+					break; // there is nothing else
+				}
+			}
+		}
+	}
+	catch(...)
+	{
+		MessageBox(NULL,_T("Translate header error"),_T(""),0);
+	}
+	if (data->body) data->bodyLen = (int)strlen(data->body);
+}
+
+//from decode.cpp
+int DecodeQuotedPrintable(char *Src,char *Dst,int DstLen, BOOL isQ);
+int DecodeBase64(char *Src,char *Dst,int DstLen);
+int ConvertStringToUnicode(char *stream,unsigned int cp,WCHAR **out);
+
+WCHAR *ParseMultipartBody(char *src, char *bond)
+{
+	char *srcback = _strdup(src);
+	size_t sizebond = strlen(bond);
+	int numparts = 1;
+	int i;
+	char *courbond = srcback;
+	WCHAR *dest;
+	for (;(courbond=strstr(courbond,bond));numparts++,courbond+=sizebond);
+	APartDataType *partData = new APartDataType[numparts];
+	memset(partData, 0, sizeof(APartDataType)*numparts);
+	partData[0].Src = courbond = srcback;
+	for (i=1;(courbond=strstr(courbond,bond));i++,courbond+=sizebond){
+		*(courbond-2) = 0;
+		partData[i].Src = courbond+sizebond;
+		while (ENDLINE(partData[i].Src)) partData[i].Src++;
+	}
+	size_t resultSize=0;
+	for (i=0;i<numparts;i++){
+		ParseAPart(&partData[i]);
+		if (partData[i].body){
+			if (partData[i].TransEnc){
+				if (!_stricmp(partData[i].TransEnc,"base64")) partData[i].TransEncType=TE_BASE64;
+				else if (!_stricmp(partData[i].TransEnc,"quoted-printable"))partData[i].TransEncType=TE_QUOTEDPRINTABLE;
+			}
+			if (partData[i].ContType){
+				char *CharSetStr;
+				if(NULL!=(CharSetStr=ExtractFromContentType(partData[i].ContType,"charset=")))
+				{
+					partData[i].CodePage=GetCharsetFromString(CharSetStr,strlen(CharSetStr));
+					delete[] CharSetStr;
+				}
+			}
+			if (partData[i].ContType && !_strnicmp(partData[i].ContType,"text",4)) {
+				char *localBody=0;
+				switch (partData[i].TransEncType){
+					case TE_BASE64:
+					{
+						int size =partData[i].bodyLen*3/4+5;
+						localBody = new char[size+1];
+						DecodeBase64(partData[i].body,localBody,size); 
+					}break;
+					case TE_QUOTEDPRINTABLE:
+					{
+						int size = partData[i].bodyLen+2;
+						localBody = new char[size+1];
+						DecodeQuotedPrintable(partData[i].body,localBody,size,FALSE); 
+					}break;
+				}
+				ConvertStringToUnicode(localBody?localBody:partData[i].body,partData[i].CodePage,&partData[i].wBody);
+				if (localBody) delete[] localBody;
+			} else if(partData[i].ContType && !_strnicmp(partData[i].ContType,"multipart/",10)){
+				//Multipart in mulitipart recursive? should be SPAM. Ah well
+				char *bondary=NULL;
+				if(NULL!=(bondary=ExtractFromContentType(partData[i].ContType,"boundary=")))
+				{
+					partData[i].wBody = ParseMultipartBody(partData[i].body,bondary);
+					delete[] bondary;
+				} else goto FailBackRaw; //multipart with no boundary? badly formatted messages.
+			} else {
+FailBackRaw:
+				ConvertStringToUnicode(partData[i].body,partData[i].CodePage,&partData[i].wBody);
+			}
+			resultSize += wcslen(partData[i].wBody);
+		}// if (partData[i].body)
+		resultSize += 100+4+3; //cr+nl+100+ 3*bullet
+	}
+	dest = new WCHAR[resultSize+1];
+	size_t destpos = 0;
+	for (i=0;i<numparts;i++){
+		if (i){ // part before first boudary should not have headers
+			char infoline[104]; size_t linesize = 0;
+			_snprintf(infoline,100,"%s %d",Translate("Part"),i);
+			linesize = strlen(infoline);
+			if (partData[i].TransEnc){
+				_snprintf(infoline+linesize,100-linesize,"; %s",partData[i].TransEnc);
+				linesize = strlen(infoline);
+			}
+			if (partData[i].ContType){
+				char *CharSetStr=strchr(partData[i].ContType,';');
+				if (CharSetStr){
+					CharSetStr[0]=0;
+					_snprintf(infoline+linesize,100-linesize,"; %s",partData[i].ContType);
+					linesize = strlen(infoline);
+					partData[i].ContType=CharSetStr+1;
+					if(NULL!=(CharSetStr=ExtractFromContentType(partData[i].ContType,"charset=")))
+					{
+						_snprintf(infoline+linesize,100-linesize,"; %s",CharSetStr);
+						linesize = strlen(infoline);
+						delete[] CharSetStr;
+					}
+					if(NULL!=(CharSetStr=ExtractFromContentType(partData[i].ContType,"name=")))
+					{
+						_snprintf(infoline+linesize,100-linesize,"; \"%s\"",CharSetStr);
+						linesize = strlen(infoline);
+						delete[] CharSetStr;
+					}
+				} else {
+					_snprintf(infoline+linesize,100-linesize,"; %s",partData[i].ContType);
+					linesize = strlen(infoline);
+				}
+			}
+			sprintf(infoline+linesize,".\r\n");
+			{WCHAR *temp=0;
+				dest[destpos] = dest[destpos+1] = dest[destpos+2] = 0x2022; // bullet;
+				destpos+=3;
+				ConvertStringToUnicode(infoline,CP_ACP,&temp);
+				size_t wsize = wcslen(temp);
+				wcscpy(&dest[destpos],temp);
+				destpos += wsize;
+				delete[] temp;
+			}
+		} // if (i)
+		if (partData[i].wBody){
+			size_t wsize = wcslen(partData[i].wBody);
+			wcscpy(&dest[destpos],partData[i].wBody);
+			destpos += wsize;
+			delete[] partData[i].wBody;
+		}
+	}
+
+	free (srcback);
+	delete[] partData;
+	dest[resultSize] = 0;//just in case
+	return dest;
+}
diff --git a/plugins/YAMN/mails/test/header.txt b/plugins/YAMN/mails/test/header.txt
new file mode 100644
index 0000000000..55a4d86d65
--- /dev/null
+++ b/plugins/YAMN/mails/test/header.txt
@@ -0,0 +1,28 @@
+Return-Path: <foromundial-return-1047-decode.com.ar-pablo=decode.com.ar@decode.com.ar>
+Delivered-To: pablo@decode.com.ar
+Received: (qmail 5438 invoked by uid 618); 5 Sep 2003 19:49:16 -0000
+Mailing-List: contact foromundial-help@decode.com.ar; run by ezmlm
+Precedence: bulk
+X-No-Archive: yes
+List-Post: <mailto:foromundial@decode.com.ar>
+List-Help: <mailto:foromundial-help@decode.com.ar>
+List-Unsubscribe: <mailto:foromundial-unsubscribe@decode.com.ar>
+List-Subscribe: <mailto:foromundial-subscribe@decode.com.ar>
+X-Seq: 1047
+Delivered-To: mailing list foromundial@decode.com.ar
+Received: (qmail 5432 invoked by uid 618); 5 Sep 2003 19:49:15 -0000
+X-Spam-Status: No, hits=3.9 required=7.5
+Message-Id: <4.2.1.20030905163128.00a998a0@mail.labsem.cetuc.puc-rio.br>
+X-Sender: sandra@mail.labsem.cetuc.puc-rio.br
+X-Mailer: QUALCOMM Windows Eudora Pro Version 4.2.1 
+Date: Fri, 05 Sep 2003 16:48:12 -0300
+To: foromundial@decode.com.ar
+From: "Sandra M. Landi" <sandra@labsem.cetuc.puc-rio.br>
+Mime-Version: 1.0
+Content-Type: multipart/alternative;
+	boundary="=====================_4293080==_.ALT"
+X-Antirelay: Good relay from local net2 139.82.127.0/26
+Subject: [foromundial-1047] frases para un viernes
+
+
+.
diff --git a/plugins/YAMN/mails/test/header2.txt b/plugins/YAMN/mails/test/header2.txt
new file mode 100644
index 0000000000..3ba81a2bd0
--- /dev/null
+++ b/plugins/YAMN/mails/test/header2.txt
@@ -0,0 +1,97 @@
+Return-Path: <miranda@megami.sprintserve.net>
+Received: [from megami.sprintserve.net (megami.sprintserve.net [207.142.136.160])
+	by mail2.ba.psg.sk  with ESMTP id i4FHNUY6018585
+	for <om3tn@psg.sk>; Sat, 15 May 2004 19:23:31 +0200]
+X-Envelope-To: <om3tn@psg.sk>
+Received: from miranda by megami.sprintserve.net with local (Exim 4.34)
+	id 1BP2sS-0006W6-MS
+	for om3tn@psg.sk; Sat, 15 May 2004 13:23:12 -0400 
+To: Undisclosed-recipients:;
+Subject: Upozorn�n� na odpov�� v t�matu - YAMN problem
+Reply-to: forum@miranda-im.org
+From: forum@miranda-im.org:
+Message-ID: <e003226b4a46a7ca6b490345f21b91af@forums.miranda-im.org>
+MIME-Version: 1.0
+Content-type: text/plain; charset=Windows-1250
+Content-transfer-encoding: 8bit
+Date: Sat, 15 May 2004 13:23:12 -0400
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: PHP
+X-MimeOLE: Produced By phpBB2
+X-MailScanner-Information: Please contact the ISP for more information
+X-MailScanner: Found to be clean
+X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
+X-AntiAbuse: Primary Hostname - megami.sprintserve.net
+X-AntiAbuse: Original Domain - psg.sk
+X-AntiAbuse: Originator/Caller UID/GID - [32110 32110] / [47 12]
+X-AntiAbuse: Sender Address Domain - megami.sprintserve.net
+X-Source: 
+X-Source-Args: 
+X-Source-Dir: 
+.
+
+Subject: Upozorn�n� na odpov�� v t�matu - YAMN problem
+
+Return-Path: <miranda@megami.sprintserve.net>
+Received: [from megami.sprintserve.net (megami.sprintserve.net [207.142.136.160])
+	by mail2.ba.psg.sk  with ESMTP id i4FHX2Y6020695
+	for <om3tn@psg.sk>; Sat, 15 May 2004 19:33:03 +0200]
+X-Envelope-To: <om3tn@psg.sk>
+Received: from miranda by megami.sprintserve.net with local (Exim 4.34)
+	id 1BP31h-0001cs-Ai
+	for om3tn@psg.sk; Sat, 15 May 2004 13:32:45 -0400
+To: Undisclosed-recipients:;
+Subject: Upozorn�n� na odpov�� v t�matu - YAMN problem
+Reply-to: forum@miranda-im.org
+From: forum@miranda-im.org
+Message-ID: <0873b36d0931479c4ebe23ba71ff4810@forums.miranda-im.org>
+MIME-Version: 1.0
+Content-type: text/plain; charset=Windows-1250
+Content-transfer-encoding: 8bit
+Date: Sat, 15 May 2004 13:32:45 -0400
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: PHP
+X-MimeOLE: Produced By phpBB2
+X-MailScanner-Information: Please contact the ISP for more information
+X-MailScanner: Found to be clean
+X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
+X-AntiAbuse: Primary Hostname - megami.sprintserve.net
+X-AntiAbuse: Original Domain - psg.sk
+X-AntiAbuse: Originator/Caller UID/GID - [32110 32110] / [47 12]
+X-AntiAbuse: Sender Address Domain - megami.sprintserve.net
+X-Source: 
+X-Source-Args: 
+X-Source-Dir: 
+
+.
+
+Received: by hplm (mbox om3tn)
+ (with POP3 daemon cucipop (v1.31 1998/05/13) Tue May 27 18:42:20 2003)
+X-From_: HMF@hotbox.ru  Tue May 20 18:11:44 2003
+Return-Path: <HMF@hotbox.ru>
+Received: from ns1.slovanet.net (ns1.slovanet.net [195.28.64.119])
+        by hplm.psg.sk (8.12.9/8.12.7) with SMTP id h4KGBfxJ003732
+        for <om3tn@psg.sk>; Tue, 20 May 2003 18:11:44 +0200
+X-Envelope-To: <om3tn@psg.sk>
+Received: (qmail 6339 invoked from network); 20 May 2003 18:11:45 +0200
+Received: from unknown (HELO ??+???) (61.33.134.106)
+  by ns1.slovanet.net with SMTP; 20 May 2003 18:11:45 +0200
+Received: by london.com (Postfix, from userid 302)
+         id WTS; Tue, 20 May 2003 20:13:19
+Received: from ��+⌥ (��+⌥ [61.33.134.106])
+         by mill.co.uk (Postfix) with ESMTP id 613
+         for <om3tn@psg.sk>; Tue, 20 May 2003 20:13:19
+Subject: ����������������. ������������. �� 0,8 �� ��, ��������� ! 20:13:19
+From: <HMF@hotbox.ru>
+To: OM3TN <om3tn@psg.sk>
+Reply-To: <>
+X-Mailer: AOL 7.0 for Windows UK sub 52
+X-Priority: 1
+X-MSMail-Priority: High
+Mime-Version: 1.0
+Content-Type: text/html; charset="Windows-1251"
+Content-Transfer-Encoding: 7bit
+Date: Tue, 20 May 2003 20:13:21
+Message-Id: <DED-173-MCL662@mail-relay2.slovanet.net>
\ No newline at end of file
diff --git a/plugins/YAMN/mails/test/readme.txt b/plugins/YAMN/mails/test/readme.txt
new file mode 100644
index 0000000000..35a30b255a
--- /dev/null
+++ b/plugins/YAMN/mails/test/readme.txt
@@ -0,0 +1,4 @@
+This  is  project  for  testing  mime  encoding/decoding. It
+is  very  usefull  for  developers,  when some problems with
+non-standard headers occured. You can use it to step through
+MIME decoding functions.
diff --git a/plugins/YAMN/mails/test/test.cpp b/plugins/YAMN/mails/test/test.cpp
new file mode 100644
index 0000000000..f8dcd14e89
--- /dev/null
+++ b/plugins/YAMN/mails/test/test.cpp
@@ -0,0 +1,42 @@
+/*
+ * This file is for testing purposes. Save in header.txt your problem header and you can
+ * browse through functions to get result
+ *
+ * (c) majvan 2002-2004
+ */
+
+#include <stdio.h>
+#include "../m_mails.h"
+
+extern void WINAPI TranslateHeaderFcn(char *stream,int len,struct CMimeItem **head);
+extern void ExtractHeader(struct CMimeItem *items,int CP,struct CHeader *head);
+
+void main()
+{
+	char Buffer[8192];			//we do not suppose longer header
+	FILE *fp;
+	YAMNMAIL *Mail;
+	PMAILDATA *MailData;
+	CMimeItem *head;
+
+	struct CHeader ExtractedHeader;
+
+	if(NULL==(fp=fopen("header2.txt","r")))
+		return;
+	fread(Buffer,sizeof(Buffer),1,fp);
+	if(ferror(fp))
+	{
+		fclose(fp);
+		return;
+	}
+	fclose(fp);
+	Mail = new YAMNMAIL;
+	MailData = new PMAILDATA;
+	head = new CMimeItem;
+	Mail->MailData = *MailData;
+	Mail->MailData->TranslatedHeader = head;
+
+	TranslateHeaderFcn(Buffer,strlen(Buffer), &Mail->MailData->TranslatedHeader);
+	ExtractHeader(Mail->MailData->TranslatedHeader,CP_ACP,&ExtractedHeader);
+	return;
+}
\ No newline at end of file
diff --git a/plugins/YAMN/mails/test/test.dsp b/plugins/YAMN/mails/test/test.dsp
new file mode 100644
index 0000000000..6d01b3669a
--- /dev/null
+++ b/plugins/YAMN/mails/test/test.dsp
@@ -0,0 +1,112 @@
+# Microsoft Developer Studio Project File - Name="test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "test.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "test.mak" CFG="test - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x405 /d "NDEBUG"
+# ADD RSC /l 0x405 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF  "$(CFG)" == "test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x405 /d "_DEBUG"
+# ADD RSC /l 0x405 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "test - Win32 Release"
+# Name "test - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\decode.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\mails.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\mime.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\test.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/plugins/YAMN/mails/test/test.dsw b/plugins/YAMN/mails/test/test.dsw
new file mode 100644
index 0000000000..e25096d17d
--- /dev/null
+++ b/plugins/YAMN/mails/test/test.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "test"=.\test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/plugins/YAMN/main.cpp b/plugins/YAMN/main.cpp
new file mode 100644
index 0000000000..05b7fd5eb4
--- /dev/null
+++ b/plugins/YAMN/main.cpp
@@ -0,0 +1,824 @@
+/*
+ * YAMN plugin main file
+ * Miranda homepage: http://miranda-icq.sourceforge.net/
+ * YAMN homepage: http://www.majvan.host.sk/Projekty/YAMN
+ *
+ * initializes all variables for further work
+ *
+ * (c) majvan 2002-2004
+ */
+
+
+#include "main.h"
+#include "yamn.h"
+#include "resources/resource.h"
+#include <io.h>
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//CRITICAL_SECTION MWCS;
+//CRITICAL_SECTION ASCS;
+//CRITICAL_SECTION PRCS;
+
+extern LPCRITICAL_SECTION PluginRegCS;
+extern HANDLE ExitEV;
+extern HANDLE WriteToFileEV;
+
+extern int PosX,PosY,SizeX,SizeY;
+extern int HeadPosX,HeadPosY,HeadSizeX,HeadSizeY,HeadSplitPos;
+
+//From account.cpp
+extern LPCRITICAL_SECTION AccountStatusCS;
+extern LPCRITICAL_SECTION FileWritingCS;
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+WCHAR	*ProfileName		= NULL;		//e.g. "majvan"
+WCHAR	*UserDirectory		= NULL;		//e.g. "F:\WINNT\Profiles\UserXYZ"
+char	*ProtoName			= YAMN_DBMODULE;
+//char *AltProtoName;
+char	*szMirandaDir		= NULL;
+char	*szProfileDir		= NULL;
+
+INT_PTR YAMN_STATUS;
+
+BOOL UninstallPlugins;
+
+HANDLE hAccountFolder;
+
+HINSTANCE *hDllPlugins;
+static int iDllPlugins=0;
+
+PLUGINLINK *pluginLink;
+YAMN_VARIABLES YAMNVar;
+
+int hLangpack;
+struct MM_INTERFACE mmi;
+
+static const MUUID interfaces[] = {MUUID_YAMN_FORCECHECK, MIID_LAST};
+
+PLUGININFOEX pluginInfo={
+	sizeof(PLUGININFOEX),
+	YAMN_SHORTNAME,
+	YAMN_VERSION,
+	"Mail notifier and browser for Miranda IM. Included POP3 protocol. Mod for Mataes Pack.",
+	"y_b tweety (majvan)",
+	"francois.mean@skynet.be",
+	"� (2002-2004 majvan) 2005-2007 tweety y_b Miranda community",
+	"http://www.miranda-im.org/download/details.php?action=viewfile&id=3411", //"http://www.majvan.host.sk/Projekty/YAMN?fm=soft",
+	UNICODE_AWARE,
+	0,		//doesn't replace anything built-in
+	{ 0xb047a7e5, 0x27a, 0x4cfc, { 0x8b, 0x18, 0xed, 0xa8, 0x34, 0x5d, 0x27, 0x90 } } // {B047A7E5-027A-4cfc-8B18-EDA8345D2790}
+
+};
+
+SKINSOUNDDESC NewMailSound={
+	sizeof(SKINSOUNDDESC),
+	YAMN_NEWMAILSOUND,	//name to refer to sound when playing and in db
+	YAMN_NEWMAILSNDDESC,	//description for options dialog
+	"",	   		//default sound file to use, without path
+};
+
+SKINSOUNDDESC ConnectFailureSound={
+	sizeof(SKINSOUNDDESC),
+	YAMN_CONNECTFAILSOUND,	//name to refer to sound when playing and in db
+	YAMN_CONNECTFAILSNDDESC,//description for options dialog
+	"",	   		//default sound file to use, without path
+};
+
+HANDLE hNewMailHook;
+//HANDLE hUninstallPluginsHook;
+
+HANDLE NoWriterEV;
+
+HANDLE hTTButton;		//TopToolBar button
+
+DWORD HotKeyThreadID;
+
+UINT SecTimer;
+
+BOOL bIcolibEmbededInCore = FALSE;
+
+HICON hYamnIcons[ICONSNUMBER];
+char *iconDescs[ICONSNUMBER]={ICONSDESCS};
+char *iconNames[ICONSNUMBER]={ICONSNAMES};
+ int iconIndexes[ICONSNUMBER]={ICONSINDS};
+
+HANDLE hMenuItemMain = 0;
+HANDLE hMenuItemCont = 0;
+HANDLE hMenuItemContApp = 0;
+
+BOOL     (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD) = 0;
+HMODULE hUxTheme = 0;
+
+// function pointers, use typedefs for casting to shut up the compiler when using GetProcAddress()
+
+typedef BOOL (WINAPI *PITA)();
+typedef HANDLE (WINAPI *POTD)(HWND, LPCWSTR);
+typedef UINT (WINAPI *PDTB)(HANDLE, HDC, int, int, RECT *, RECT *);
+typedef UINT (WINAPI *PCTD)(HANDLE);
+typedef UINT (WINAPI *PDTT)(HANDLE, HDC, int, int, LPCWSTR, int, DWORD, DWORD, RECT *);
+
+PITA pfnIsThemeActive = 0;
+POTD pfnOpenThemeData = 0;
+PDTB pfnDrawThemeBackground = 0;
+PCTD pfnCloseThemeData = 0;
+PDTT pfnDrawThemeText = 0;
+
+#define FIXED_TAB_SIZE 100                  // default value for fixed width tabs
+
+/*
+ * visual styles support (XP+)
+ * returns 0 on failure
+ */
+
+int InitVSApi()
+{
+    if((hUxTheme = LoadLibraryA("uxtheme.dll")) == 0)
+        return 0;
+
+    pfnIsThemeActive = (PITA)GetProcAddress(hUxTheme, "IsThemeActive");
+    pfnOpenThemeData = (POTD)GetProcAddress(hUxTheme, "OpenThemeData");
+    pfnDrawThemeBackground = (PDTB)GetProcAddress(hUxTheme, "DrawThemeBackground");
+    pfnCloseThemeData = (PCTD)GetProcAddress(hUxTheme, "CloseThemeData");
+    pfnDrawThemeText = (PDTT)GetProcAddress(hUxTheme, "DrawThemeText");
+    
+    MyEnableThemeDialogTexture = (BOOL (WINAPI *)(HANDLE, DWORD))GetProcAddress(hUxTheme, "EnableThemeDialogTexture");
+    if(pfnIsThemeActive != 0 && pfnOpenThemeData != 0 && pfnDrawThemeBackground != 0 && pfnCloseThemeData != 0 && pfnDrawThemeText != 0) {
+        return 1;
+    }
+    return 0;
+}
+
+/*
+ * unload uxtheme.dll
+ */
+
+int FreeVSApi()
+{
+    if(hUxTheme != 0)
+        FreeLibrary(hUxTheme);
+    return 0;
+}
+
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+static void GetProfileDirectory(char *szPath,int cbPath)
+//This is copied from Miranda's sources. In 0.2.1.0 it is needed, in newer vesions of Miranda use MS_DB_GETPROFILEPATH service
+{
+	szProfileDir=new char[MAX_PATH];
+	if (ServiceExists(MS_DB_GETPROFILEPATH)){
+		if (!CallService(MS_DB_GETPROFILEPATH,(WPARAM)cbPath,(LPARAM)szPath)) {
+			lstrcpy(szProfileDir,szPath);
+			return; //success
+		}
+	}
+	char szMirandaIni[MAX_PATH],szExpandedProfileDir[MAX_PATH];
+	DWORD dwAttributes;
+
+	lstrcpy(szMirandaIni,szMirandaDir);
+	lstrcat(szMirandaIni,"\\mirandaboot.ini");
+	GetPrivateProfileString("Database","ProfileDir",".",szProfileDir,sizeof(szProfileDir),szMirandaIni);
+	ExpandEnvironmentStrings(szProfileDir,szExpandedProfileDir,sizeof(szExpandedProfileDir));
+	_chdir(szMirandaDir);
+	if(!_fullpath(szPath,szExpandedProfileDir,cbPath))
+		lstrcpyn(szPath,szMirandaDir,cbPath);
+	if(szPath[lstrlen(szPath)-1]=='\\') szPath[lstrlen(szPath)-1]='\0';
+	if((dwAttributes=GetFileAttributes(szPath))!=0xffffffff&&dwAttributes&FILE_ATTRIBUTE_DIRECTORY) return;
+	CreateDirectory(szPath,NULL);
+}
+
+void SetDefaultProtocolIcons()
+{
+	char szFileName[MAX_PATH+1];
+	char oldname[] = YAMN_DBMODULE"4007_"; // the deprecated one
+	char dllname[] = "plugins\\"YAMN_DBMODULE".dll,-xxxxx";
+
+	// determine whether external icon file exists
+	lstrcpy(szFileName, szMirandaDir);
+	lstrcat(szFileName, "\\icons\\proto_"YAMN_DBMODULE".dll");
+	BOOL isDllPresent = (_access(szFileName, 0) == 0);
+
+	WORD statuses[4] = {ID_STATUS_OFFLINE,ID_STATUS_ONLINE,ID_STATUS_NA,ID_STATUS_OCCUPIED};
+	BYTE  indices[4] = {7,                0,               3,           4};
+	//From skinicons.c skinIconStatusToIdStatus[] 
+	BYTE protoStatusInd[4] = {0,1,4,5};
+
+	for (int i=0;i<4;i++){
+		oldname[sizeof(oldname)-2]=protoStatusInd[i]+'1'; // "Out for lunch will not work here"
+		if (isDllPresent){ // use the icons in proto_YAMN.dll and delete any user settings
+			DBDeleteContactSetting(NULL, "Icons", oldname);
+		} else {
+			DBVARIANT dbv;
+			if(!DBGetContactSetting(NULL,"SkinIcons",iconNames[indices[i]],&dbv)) 
+			{// user won't be able to set status icons different from those in YAMN section
+				DBWriteContactSettingString(NULL, "Icons", oldname, (char *)dbv.pszVal);			
+				DBFreeVariant(&dbv);
+			} else {
+				_snprintf(&dllname[sizeof(dllname)-6],5,"%d",iconIndexes[indices[i]]);
+				DBWriteContactSettingString(NULL, "Icons", oldname, dllname);			
+			}
+		}
+	}
+}
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
+{
+	YAMNVar.hInst=hinstDLL;
+	if(fdwReason==DLL_PROCESS_ATTACH)
+	{
+		if(NULL==(UserDirectory=new WCHAR[MAX_PATH]))
+			return FALSE;
+	}
+	return TRUE;
+}
+
+extern "C" __declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+	if (mirandaVersion >= PLUGIN_MAKE_VERSION(0, 7, 0, 3))
+		bIcolibEmbededInCore = TRUE;
+	pluginInfo.cbSize = sizeof(PLUGININFO);//Miranda pre-0.7.0.17 does not load the plugin if cbSize does not match.
+	return (PLUGININFO *) &pluginInfo;
+}
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+	if (mirandaVersion >= PLUGIN_MAKE_VERSION(0, 7, 0, 3))
+		bIcolibEmbededInCore = TRUE;
+	pluginInfo.cbSize = sizeof(PLUGININFOEX);//Make sure cbSize is correct;
+	return &pluginInfo;
+}
+
+extern "C" __declspec(dllexport) const MUUID * MirandaPluginInterfaces(void)
+{
+	return interfaces;
+}
+
+#ifdef YAMN_DEBUG
+static char unknownCP[1500]={0};
+#endif
+// The callback function
+BOOL CALLBACK EnumSystemCodePagesProc(LPTSTR cpStr)
+{
+    //Convert code page string to number
+    UINT cp = _ttoi(cpStr);
+    if (!IsValidCodePage(cp))
+        return TRUE;
+
+    //Get Code Page name
+    CPINFOEX info;
+    if(GetCPInfoEx(cp,0,&info)){
+		#ifdef YAMN_DEBUG
+		BOOLEAN found = FALSE;
+		#endif
+		for (int i=1;i<CPLENALL;i++) if (CodePageNamesAll[i].CP==cp) {
+			CodePageNamesAll[i].isValid = TRUE;
+			CPLENSUPP++;
+			#ifdef YAMN_DEBUG
+			found = TRUE;
+			#endif
+			break;
+		}
+		#ifdef YAMN_DEBUG
+		if (!found) {
+			strcat(unknownCP,info.CodePageName);
+			strcat(unknownCP,"\n");
+		}
+		#endif
+	}
+    return TRUE;
+}
+
+int SystemModulesLoaded(WPARAM,LPARAM){
+	if(ServiceExists(MS_SKIN2_ADDICON))
+	{
+		//MessageBox(NULL,"Icolib present","test",0);
+		SKINICONDESC sid = {0};
+		HICON temp;
+		sid.cbSize = SKINICONDESC_SIZE; 
+		sid.pszSection = "YAMN";
+		sid.pszDefaultFile = NULL;
+		for (int i=0; i<ICONSNUMBER; i++){
+			sid.iDefaultIndex = -iconIndexes[i];
+			sid.pszName = iconNames[i];
+			sid.pszDescription = iconDescs[i];
+			sid.hDefaultIcon = hYamnIcons[i];
+			CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+			if (temp = (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) iconNames[i]))hYamnIcons[i]=temp; 
+		}
+	}
+
+	CLISTMENUITEM mi;
+
+	//Insert "Check mail (YAMN)" item to Miranda's menu
+	ZeroMemory(&mi,sizeof(mi));
+	mi.cbSize = sizeof(mi);
+	mi.position = 0xb0000000;
+	mi.flags = 0;
+	mi.hIcon = hYamnIcons[5];
+	mi.pszName = "Check &mail (All Account)";
+	mi.pszPopupName = NULL;//ProtoName;
+	mi.pszService = MS_YAMN_FORCECHECK;
+	if(DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_SHOWMAINMENU, 1))
+		hMenuItemMain = (HANDLE) CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);
+
+	mi.pszName = "Check &mail (This Account)";
+	mi.pszContactOwner = ProtoName;
+	mi.pszService = MS_YAMN_CLISTCONTEXT;
+	hMenuItemCont = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+	mi.hIcon = hYamnIcons[4];
+	mi.pszName = "Launch application";
+	mi.pszContactOwner = ProtoName;
+	mi.pszService = MS_YAMN_CLISTCONTEXTAPP;
+	hMenuItemContApp = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+	//Use for the Updater plugin
+	if(ServiceExists(MS_UPDATE_REGISTER)) 
+	{
+		Update update = {0};
+		char szVersion[16];
+		char szUrl[250];
+
+		update.szComponentName = pluginInfo.shortName;
+		update.pbVersion = (BYTE *)CreateVersionStringPlugin((PLUGININFO *)&pluginInfo, szVersion);
+		update.cpbVersion = (int)strlen((char *)update.pbVersion);
+		/*#ifdef YAMN_9x
+		update.szUpdateURL = "http://addons.miranda-im.org/feed.php?dlfile=2166";
+		update.szVersionURL = "http://addons.miranda-im.org/details.php?action=viewfile&id=2166";
+		update.pbVersionPrefix = (BYTE *)"<span class=\"fileNameHeader\">YAMN tweety win9x ";
+		#else
+		update.szUpdateURL = "http://addons.miranda-im.org/feed.php?dlfile=2165";
+		update.szVersionURL = "http://addons.miranda-im.org/details.php?action=viewfile&id=2165";
+		update.pbVersionPrefix = (BYTE *)"<span class=\"fileNameHeader\">YAMN tweety ";
+		#endif*/
+		update.szUpdateURL = "http://addons.miranda-im.org/feed.php?dlfile=3411";
+		update.szVersionURL = "http://addons.miranda-im.org/details.php?action=viewfile&id=3411";
+		update.pbVersionPrefix = (BYTE *)"<span class=\"fileNameHeader\">YAMN 2in1 ";
+		wsprintf(szUrl,"http://www.miranda-fr.net/tweety/yamn/%s.zip",YAMN_FILENAME);
+	    update.szBetaUpdateURL = szUrl;
+		update.szBetaVersionURL = "http://www.miranda-fr.net/tweety/yamn/yamn_beta.html";
+		update.pbBetaVersionPrefix = (BYTE *)"YAMN version ";
+		update.cpbVersionPrefix = (int)strlen((char *)update.pbVersionPrefix);
+		update.cpbBetaVersionPrefix = (int)strlen((char *)update.pbBetaVersionPrefix);
+
+		CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+
+	}
+	if (ServiceExists(MS_FOLDERS_GET_PATH)){
+		//char AccountFolder[MAX_PATH];
+		//CallService(MS_DB_GETPROFILEPATH, (WPARAM) MAX_PATH, (LPARAM)AccountFolder);
+		//sprintf(AccountFolder,"%s\\%s",AccountFolder,ProtoName);
+		hAccountFolder = FoldersRegisterCustomPathW(ProtoName,YAMN_DBMODULE" Account Folder", UserDirectory);
+		
+		FoldersGetCustomPathW(hAccountFolder,  UserDirectory, MAX_PATH, UserDirectory);
+		//MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,AccountFolder,-1,UserDirectory,strlen(AccountFolder)+1);
+	}
+
+	RegisterPOP3Plugin(0,0);
+
+	return 0;
+}
+
+//int IcoLibIconsChanged(WPARAM wParam, LPARAM lParam); // implemented in services.cpp
+extern HCURSOR hCurSplitNS, hCurSplitWE;
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+	UINT mod,vk;
+	char pn[MAX_PATH+1];
+	char *fc;
+	int i,k;
+
+	pluginLink=link;
+	mir_getLP(&pluginInfo);
+	mir_getMMI(&mmi);
+
+	YAMN_STATUS = ID_STATUS_OFFLINE;
+
+	//	we get the Miranda Root Path
+	szMirandaDir=new char[MAX_PATH];
+	if (ServiceExists(MS_UTILS_PATHTOABSOLUTE)){
+		CallService(MS_UTILS_PATHTOABSOLUTE, (WPARAM)".",(LPARAM)szMirandaDir);
+	}
+	else {
+		char *str2;
+		GetModuleFileName(GetModuleHandle(NULL),szMirandaDir,MAX_PATH);
+		str2=strrchr(szMirandaDir,'\\');
+		if(str2!=NULL) *str2=0;
+	}
+
+	//	we get the user path where our yamn-account.book.ini is stored from mirandaboot.ini file
+	char szProfileDir[MAX_PATH+1];
+	GetProfileDirectory(szProfileDir,sizeof(szProfileDir));
+	MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,szProfileDir,-1,UserDirectory,(int)strlen(szProfileDir)+1);
+
+	
+	// Enumerate all the code pages available for the System Locale
+	EnumSystemCodePages(EnumSystemCodePagesProc, CP_INSTALLED);
+	CodePageNamesSupp = new _tcptable[CPLENSUPP];
+	for (i=0,k=0;i<CPLENALL;i++) {
+		if (CodePageNamesAll[i].isValid){
+			CodePageNamesSupp[k]=CodePageNamesAll[i];
+			k++;
+		}
+	}
+	#ifdef YAMN_DEBUG
+//unknownCP	0x6005a734
+//20127 (US-ASCII)
+//20261 (T.61)
+//28605 (ISO 8859-15 Latin 9)
+//737   (OEM - Greek 437G)
+//874   (ANSI/OEM - Thai)
+//932   (ANSI/OEM - Japanese Shift-JIS)
+//936   (ANSI/OEM - Simplified Chinese GBK)
+//949   (ANSI/OEM - Korean)
+    MessageBox( NULL,unknownCP, TEXT("Unkown Code Page"), MB_OK);
+	#endif
+
+	HIMAGELIST CSImages = ImageList_Create(16, 16, ILC_COLOR8|ILC_MASK, 0, 3);
+	{// workarround of 4bit forced images
+		HBITMAP hScrBM = (HBITMAP)LoadImage(YAMNVar.hInst,MAKEINTRESOURCE(IDB_ICONS), IMAGE_BITMAP, 0, 0,LR_SHARED);
+		ImageList_AddMasked(CSImages, hScrBM, RGB( 255, 0, 255 ));
+		DeleteObject(hScrBM);
+	}
+	for (i=0,k=0; i<ICONSNUMBER; i++){
+		switch (i){
+			case 0: case 3: case 4: case 7: hYamnIcons[i] = LoadIcon(YAMNVar.hInst,MAKEINTRESOURCE(iconIndexes[i])); break;
+			case 6: hYamnIcons[i] = hYamnIcons[4]; break;
+			default: hYamnIcons[i] = ImageList_ExtractIcon(NULL, CSImages, k); k++;
+		}
+	}
+
+	//Registering YAMN as protocol
+	PROTOCOLDESCRIPTOR pd = {0};
+	pd.cbSize=PROTOCOLDESCRIPTOR_V3_SIZE;
+	pd.szName=ProtoName;
+	pd.type=PROTOTYPE_PROTOCOL;
+	
+	CallService(MS_PROTO_REGISTERMODULE,0,(LPARAM)&pd);
+
+	if(NULL==(ProfileName=new WCHAR[MAX_PATH]))
+		return 1;
+
+	CallService(MS_DB_GETPROFILENAME,(WPARAM)sizeof(pn),(LPARAM)&(*pn));	//not to pass entire array to fcn
+	if(NULL!=(fc=strrchr(pn,(int)'.')))
+		*fc=0;
+	MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,pn,-1,ProfileName,(int)strlen(pn)+1);
+
+	if(NULL==(AccountStatusCS=new CRITICAL_SECTION))
+		return 1;
+	if(NULL==(FileWritingCS=new CRITICAL_SECTION))
+		return 1;
+	if(NULL==(PluginRegCS=new CRITICAL_SECTION))
+		return 1;
+
+	InitializeCriticalSection(AccountStatusCS);
+	InitializeCriticalSection(FileWritingCS);
+	InitializeCriticalSection(PluginRegCS);
+
+	if(NULL==(NoWriterEV=CreateEvent(NULL,TRUE,TRUE,NULL)))
+		return 1;
+	if(NULL==(WriteToFileEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+		return 1;
+	if(NULL==(ExitEV=CreateEvent(NULL,TRUE,FALSE,NULL)))
+		return 1;
+//	AccountWriterSO=new SCOUNTER(NoWriterEV);
+
+	NewMailSound.pszDescription=Translate(YAMN_NEWMAILSNDDESC);
+	ConnectFailureSound.pszDescription=Translate(YAMN_CONNECTFAILSNDDESC);
+
+	PosX=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBPOSX,0);
+	PosY=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBPOSY,0);
+	SizeX=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBSIZEX,800);
+	SizeY=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBSIZEY,200);
+
+	HeadPosX=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSX,0);
+	HeadPosY=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSY,0);
+	HeadSizeX=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGSIZEX,690);
+	HeadSizeY=DBGetContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGSIZEY,300);
+	HeadSplitPos=DBGetContactSettingWord(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSSPLIT,250);
+
+	optDateTime=DBGetContactSettingByte(NULL,YAMN_DBMODULE,YAMN_DBTIMEOPTIONS,optDateTime);
+
+//Create new window queues for broadcast messages
+	YAMNVar.MessageWnds=(HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST,0,0);
+	YAMNVar.NewMailAccountWnd=(HANDLE)CallService(MS_UTILS_ALLOCWINDOWLIST,0,0);
+	YAMNVar.Shutdown=FALSE;
+
+	hCurSplitNS = LoadCursor(NULL, IDC_SIZENS);
+	hCurSplitWE = LoadCursor(NULL, IDC_SIZEWE);
+
+#ifdef YAMN_DEBUG
+	InitDebug();
+#endif
+
+
+	CreateServiceFunctions();
+
+	CallService(MS_SKIN_ADDNEWSOUND,0,(LPARAM)&NewMailSound);
+	CallService(MS_SKIN_ADDNEWSOUND,0,(LPARAM)&ConnectFailureSound);
+
+	/*
+	// this does nothing - these event are never fired
+	hNewMailHook=CreateHookableEvent(ME_YAMN_NEWMAIL);
+	hUninstallPluginsHook=CreateHookableEvent(ME_YAMN_UNINSTALLPLUGINS);
+	*/	
+
+	HookEvents();
+
+	if (!bIcolibEmbededInCore)
+		SetDefaultProtocolIcons();
+
+	LoadPlugins();
+
+	InitVSApi();
+
+	WordToModAndVk(DBGetContactSettingWord(NULL,YAMN_DBMODULE,YAMN_HKCHECKMAIL,YAMN_DEFAULTHK),&mod,&vk);
+		
+//Create thread for hotkey
+	WORD HotKey = MAKEWORD((BYTE)vk,(BYTE)mod);
+	CloseHandle(CreateThread(NULL,0,YAMNHotKeyThread,(LPVOID)HotKey,0,&HotKeyThreadID));
+//Create thread that will be executed every second
+	if(!(SecTimer=SetTimer(NULL,0,1000,(TIMERPROC)TimerProc)))
+		return 1;
+
+
+#ifdef YAMN_VER_BETA
+	#ifdef YAMN_VER_BETA_CRASHONLY
+	MessageBox(NULL,"This YAMN beta version is intended for testing. After crash, you should send report to author. Please read included readme when available. Thank you.","YAMN beta",MB_OK);
+	#else
+	MessageBox(NULL,"This YAMN beta version is intended for testing. You should inform author if it works or when it does not work. Please read included readme when available. Thank you.","YAMN beta",MB_OK);
+	#endif
+#endif
+#ifdef YAMN_DEBUG
+	MessageBox(NULL,"This YAMN creates extended debug logfiles. It is not intended for general use.","YAMN beta",MB_OK);
+#endif
+
+	return 0;
+}
+
+extern "C" int __declspec(dllexport) UninstallEx(PLUGINUNINSTALLPARAMS* ppup)
+{
+	const char* DocFiles[]={"YAMN-License.txt","YAMN-Readme.txt","YAMN-Readme.developers.txt",NULL};
+
+	typedef int (* UNINSTALLFILTERFCN)();
+	UNINSTALLFILTERFCN UninstallFilter;
+
+	PUIRemoveSkinSound(YAMN_NEWMAILSOUND);
+	PUIRemoveSkinSound(YAMN_CONNECTFAILSOUND);
+
+	if(UninstallPlugins)
+	{
+		for(int i=0;i<iDllPlugins;i++)
+		{
+			if(NULL!=(UninstallFilter=(UNINSTALLFILTERFCN)GetProcAddress(hDllPlugins[i],"UninstallFilter")))
+				UninstallFilter();
+
+			FreeLibrary(hDllPlugins[i]);
+			hDllPlugins[i]=NULL;				//for safety
+		}
+		iDllPlugins = 0;
+		if(hDllPlugins){
+			free((void *)hDllPlugins);
+			hDllPlugins = NULL;
+		}
+
+//		NotifyEventHooks(ME_YAMN_UNINSTALLPLUGINS,0,0);
+	}
+	UninstallPOP3(ppup);
+
+	MessageBoxA(NULL,"You have to delete manually YAMN plugins located in \"Plugins/YAMN\" folder.","YAMN uninstalling",MB_OK|MB_ICONINFORMATION);
+	PUIRemoveFilesInDirectory(ppup->pszDocsPath,DocFiles);
+	if(ppup->bDoDeleteSettings)
+		PUIRemoveDbModule("YAMN");
+	return 0;
+}
+
+int Shutdown(WPARAM,LPARAM)
+{
+	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSX,HeadPosX);
+	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSY,HeadPosY);
+	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGSIZEX,HeadSizeX);
+	DBWriteContactSettingDword(NULL,YAMN_DBMODULE,YAMN_DBMSGSIZEY,HeadSizeY);
+	DBWriteContactSettingWord(NULL,YAMN_DBMODULE,YAMN_DBMSGPOSSPLIT,HeadSplitPos);
+	YAMNVar.Shutdown=TRUE;
+//	CallService(MS_TTB_REMOVEBUTTON,(WPARAM)hTTButton,0);		//this often leads to deadlock in Miranda (bug in Miranda)
+	KillTimer(NULL,SecTimer);
+
+	UnregisterProtoPlugins();
+	UnregisterFilterPlugins();
+	return 0;
+}
+
+//We undo all things from Load()
+extern "C" int __declspec(dllexport) Unload(void)
+{
+#ifdef YAMN_DEBUG
+	UnInitDebug();
+#endif
+	DestroyCursor(hCurSplitNS);
+	DestroyCursor(hCurSplitWE);
+
+	CloseHandle(NoWriterEV);
+	CloseHandle(WriteToFileEV);
+	CloseHandle(ExitEV);
+
+	FreeVSApi();
+
+	DeleteCriticalSection(AccountStatusCS);
+	delete AccountStatusCS;
+	DeleteCriticalSection(FileWritingCS);
+	delete FileWritingCS;
+	DeleteCriticalSection(PluginRegCS);
+
+	delete PluginRegCS;
+	UnhookEvents();
+	DestroyServiceFunctions();
+
+	UnloadPlugins();
+
+	delete [] CodePageNamesSupp;
+	delete [] szMirandaDir;
+	delete [] UserDirectory;
+	delete [] szProfileDir;
+	delete [] ProfileName;
+	return 0;
+}
+
+void LoadPlugins()
+{
+	HANDLE hFind;
+	WIN32_FIND_DATA fd;
+	char szSearchPath[MAX_PATH];
+	char szPluginPath[MAX_PATH];
+	lstrcpy(szSearchPath,szMirandaDir);
+	lstrcat(szSearchPath,"\\Plugins\\YAMN\\*.dll");
+	typedef INT_PTR (*LOADFILTERFCN)(MIRANDASERVICE GetYAMNFcn);
+
+	hDllPlugins=NULL;
+
+	if(INVALID_HANDLE_VALUE!=(hFind=FindFirstFile(szSearchPath,&fd)))
+	{
+		do
+		{	//rewritten from Miranda sources... Needed because Win32 API has a bug in FindFirstFile, search is done for *.dlllllll... too
+			char *dot=strrchr(fd.cFileName,'.');
+			if(dot)
+			{ // we have a dot
+				int len=(int)strlen(fd.cFileName); // find the length of the string
+				char* end=fd.cFileName+len; // get a pointer to the NULL
+				int safe=(end-dot)-1;	// figure out how many chars after the dot are "safe", not including NULL
+		
+				if((safe!=3) || (lstrcmpi(dot+1,"dll")!=0)) //not bound, however the "dll" string should mean only 3 chars are compared
+					continue;
+			}
+			else
+				continue;
+			
+			HINSTANCE hDll;
+			LOADFILTERFCN LoadFilter;
+
+			lstrcpy(szPluginPath,szMirandaDir);
+			lstrcat(szPluginPath,"\\Plugins\\YAMN\\");
+			lstrcat(szPluginPath,fd.cFileName);
+			if((hDll=LoadLibrary(szPluginPath))==NULL) continue;
+			LoadFilter=(LOADFILTERFCN)GetProcAddress(hDll,"LoadFilter");
+			if(NULL==LoadFilter)
+			{
+				FreeLibrary(hDll);
+				hDll=NULL;
+				continue;
+			}
+			if(!(*LoadFilter)(GetFcnPtrSvc))
+			{
+				FreeLibrary(hDll);
+				hDll=NULL;
+			}
+
+			if(hDll!=NULL)
+			{
+				hDllPlugins=(HINSTANCE *)realloc((void *)hDllPlugins,(iDllPlugins+1)*sizeof(HINSTANCE));
+				hDllPlugins[iDllPlugins++]=hDll;
+			}
+		} while(FindNextFile(hFind,&fd));
+	FindClose(hFind);
+	}
+}
+
+void UnloadPlugins()
+{
+	for(int i=iDllPlugins-1;i>=0;i--) {
+		if(FreeLibrary(hDllPlugins[i])){
+			hDllPlugins[i]=NULL;				//for safety
+			iDllPlugins --;
+		}
+	}
+	if(hDllPlugins){
+		free((void *)hDllPlugins);
+		hDllPlugins = NULL;
+	}
+}
+
+void GetIconSize(HICON hIcon, int* sizeX, int* sizeY)
+{
+    ICONINFO ii;
+    BITMAP bm;
+    GetIconInfo(hIcon, &ii);
+    GetObject(ii.hbmColor, sizeof(bm), &bm);
+    if (sizeX != NULL) *sizeX = bm.bmWidth;
+    if (sizeY != NULL) *sizeY = bm.bmHeight;
+    DeleteObject(ii.hbmMask);
+    DeleteObject(ii.hbmColor);
+}
+
+HBITMAP LoadBmpFromIcon(HICON hIcon)
+{
+	HBITMAP hBmp, hoBmp;
+    HDC hdc, hdcMem;
+    HBRUSH hBkgBrush;
+
+	int IconSizeX = 16;
+    int IconSizeY = 16;
+
+	//GetIconSize(hIcon, &IconSizeX, &IconSizeY);
+
+	//DebugLog(SynchroFile,"Icon size %i %i\n",IconSizeX,IconSizeY);
+
+    if ((IconSizeX == 0) || (IconSizeY == 0)) 
+	{    
+        IconSizeX = 16;
+        IconSizeY = 16;
+    }
+
+    RECT rc;
+    BITMAPINFOHEADER bih = {0};
+    int widthBytes;
+
+    hBkgBrush = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
+    bih.biSize = sizeof(bih);
+    bih.biBitCount = 24;
+    bih.biPlanes = 1;
+    bih.biCompression = BI_RGB;
+    bih.biHeight = IconSizeY;
+    bih.biWidth = IconSizeX; 
+    widthBytes = ((bih.biWidth*bih.biBitCount + 31) >> 5) * 4;
+    rc.top = rc.left = 0;
+    rc.right = bih.biWidth;
+    rc.bottom = bih.biHeight;
+    hdc = GetDC(NULL);
+    hBmp = CreateCompatibleBitmap(hdc, bih.biWidth, bih.biHeight);
+    hdcMem = CreateCompatibleDC(hdc);
+    hoBmp = (HBITMAP)SelectObject(hdcMem, hBmp);
+    FillRect(hdcMem, &rc, hBkgBrush);
+    DrawIconEx(hdcMem, 0, 0, hIcon, bih.biWidth, bih.biHeight, 0, NULL, DI_NORMAL);
+    SelectObject(hdcMem, hoBmp);
+
+	return hBmp;
+}
+
+int AddTopToolbarIcon(WPARAM,LPARAM)
+{
+	TTBButton Button=
+	{
+		sizeof(TTBButton),
+		NULL,
+		NULL,
+		NULL,
+		MS_YAMN_FORCECHECK,
+		TTBBF_VISIBLE | TTBBF_SHOWTOOLTIP, // | TTBBF_DRAWBORDER,
+		0,0,0,0,
+		NULL
+	};
+
+	if(!DBGetContactSettingByte(NULL,YAMN_DBMODULE,YAMN_TTBFCHECK,1))
+		return 1;
+	
+	Button.name=Translate("Check mail");
+	
+	Button.hbBitmapUp = LoadBmpFromIcon(hYamnIcons[5]);
+	Button.hbBitmapDown = LoadBmpFromIcon(hYamnIcons[6]); //LoadBitmap(YAMNVar.hInst,MAKEINTRESOURCE(IDB_BMTTB));
+	
+	if((HANDLE)-1==(hTTButton=(HANDLE)CallService(MS_TTB_ADDBUTTON,(WPARAM)&Button,(LPARAM)0)))
+		return 1;
+	CallService(MS_TTB_SETBUTTONOPTIONS,MAKEWPARAM((WORD)TTBO_TIPNAME,(WORD)hTTButton),(LPARAM)Translate("Check mail"));
+	return 0;
+}
+
+int UninstallQuestionSvc(WPARAM wParam,LPARAM)
+{
+//	if(strcmp((char *)wParam,Translate("Yet Another Mail Notifier")))
+//		return 0;
+	switch(MessageBoxA(NULL,Translate("Do you also want to remove native YAMN plugins settings?"),Translate("YAMN uninstalling"),MB_YESNOCANCEL|MB_ICONQUESTION))
+	{
+		case IDYES:
+			UninstallPlugins=TRUE;
+			break;
+		case IDNO:
+			UninstallPlugins=FALSE;
+			break;
+		case IDCANCEL:
+			return 1;
+	}
+	return 0;
+}
diff --git a/plugins/YAMN/main.h b/plugins/YAMN/main.h
new file mode 100644
index 0000000000..56b9d918ce
--- /dev/null
+++ b/plugins/YAMN/main.h
@@ -0,0 +1,66 @@
+#ifndef __MAIN_H
+#define __MAIN_H
+
+#ifdef __GNUC__
+	#define __try
+	#define __except(x) if (0) /* don't execute handler */
+	#define __finally
+	#define _try __try
+	#define _except __except
+	#define _finally __finally 
+#endif
+//For updater
+//#define YAMN_9x
+#ifndef WIN2IN1
+#ifdef YAMN_9x
+	#define YAMN_SHORTNAME "YAMN tweety win9x"
+	#define YAMN_FILENAME "yamn_9x"
+#else
+	#define YAMN_SHORTNAME "YAMN tweety"
+	#define YAMN_FILENAME "yamn"
+#endif
+#else
+	#define YAMN_SHORTNAME "YAMN tweety 2in1"
+	#define YAMN_FILENAME "yamn"
+#endif //WIN2IN1
+
+#include "version.h"
+#define YAMN_NEWMAILSNDDESC		"YAMN: new mail message"
+#define YAMN_CONNECTFAILSNDDESC	"YAMN: connect failed"
+#define	YAMN_CONNECTFAILSOUND	"YAMN/Sound/ConnectFail"
+#define	YAMN_NEWMAILSOUND		"YAMN/Sound/NewMail"
+
+#define YAMN_DBMODULE		"YAMN"
+#define YAMN_DBPOSX			"MailBrowserWinX"
+#define YAMN_DBPOSY			"MailBrowserWinY"
+#define YAMN_DBSIZEX		"MailBrowserWinW"
+#define YAMN_DBSIZEY		"MailBrowserWinH"
+#define YAMN_DBMSGPOSX		"MailMessageWinX"
+#define YAMN_DBMSGPOSY		"MailMessageWinY"
+#define YAMN_DBMSGSIZEX		"MailMessageWinW"
+#define YAMN_DBMSGSIZEY		"MailMessageWinH"
+#define YAMN_DBMSGPOSSPLIT	"MailMessageSplitY"
+#define YAMN_HKCHECKMAIL	"HKCheckMail"
+#define	YAMN_TTBFCHECK		"ForceCheckTTB"
+#define	YAMN_SHOWMAINMENU	"ShowMainMenu"
+#define	YAMN_CLOSEDELETE	"CloseOnDelete"
+#define YAMN_SHOWASPROTO	"ShowAsProtcol"
+#define	YAMN_DBTIMEOPTIONS	"MailBrowserTimeOpts"
+
+#define YAMN_DEFAULTHK		MAKEWORD(VK_F11,MOD_CONTROL)
+
+#define SHOWDATELONG		0x01
+#define SHOWDATENOTODAY		0x02
+#define SHOWDATENOSECONDS	0x04
+
+extern unsigned char optDateTime;
+
+void UnloadPlugins();
+
+//  Loading Icon and checking for icolib 
+void LoadIcons();
+extern int iconIndexes[];
+
+
+#endif
+
diff --git a/plugins/YAMN/mingw/base.dev b/plugins/YAMN/mingw/base.dev
new file mode 100644
index 0000000000..42e2fab4f2
--- /dev/null
+++ b/plugins/YAMN/mingw/base.dev
@@ -0,0 +1,69 @@
+[Project]
+FileName=base.dev
+Name=base
+Ver=1
+IsCpp=1
+Type=3
+Compiler=-D__GNUWIN32__ -mcpu=i486 -D_M_IX86=400 -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS_@@_
+CppCompiler=-D__GNUWIN32__ -mcpu=i486 -D_M_IX86=400 -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS_@@_
+Includes=../../../include
+Linker=-lkernel32 -luser32_@@_
+Libs=
+UnitCount=2
+Folders="Header Files","Resource Files","Source Files"
+ObjFiles=
+PrivateResource=
+ResourceIncludes=
+MakeIncludes=
+Icon=
+ExeOutput=binfilter
+ObjectOutput=objbase
+OverrideOutput=0
+OverrideOutputName=base.dll
+HostApplication=
+CommandLine=
+UseCustomMakefile=1
+CustomMakefile=base.win
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=0010000001001000000100
+
+[Unit1]
+FileName=..\filter\base\maindll.cpp
+Folder="Source Files"
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=..\filter\base\debug.cpp
+Folder="Source Files"
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=0.1
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=base.dll
+ProductName=base
+ProductVersion=0.1
+AutoIncBuildNr=0
+
diff --git a/plugins/YAMN/mingw/base.win b/plugins/YAMN/mingw/base.win
new file mode 100644
index 0000000000..3af9e7aa60
--- /dev/null
+++ b/plugins/YAMN/mingw/base.win
@@ -0,0 +1,38 @@
+# Project: base
+# Makefile created by Dev-C++ 4.9.9.2
+
+CPP  = g++.exe
+CC   = gcc.exe
+WINDRES = windres.exe
+RES  = 
+OBJ  = objbase/maindll.o objbase/debug.o $(RES)
+LINKOBJ  = objbase/maindll.o objbase/debug.o $(RES)
+LIBS =  -lkernel32 -luser32 -s 
+INCS =  -I"../../../include" 
+CXXINCS =  -I"../../../include" 
+BIN  = binfilter/base.dll
+CXXFLAGS = $(CXXINCS) -D__GNUWIN32__ -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS   -w -fweb -frename-registers -Os
+CFLAGS = $(INCS) -D__GNUWIN32__ -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS   -w -fweb -frename-registers -Os
+RM = rm -f
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before binfilter/base.dll all-after
+
+
+clean: clean-custom
+	${RM} $(OBJ) $(BIN)
+
+DLLWRAP=dllwrap.exe
+DEFFILE=objbase/libbase.def
+STATICLIB=objbase/libbase.a
+
+$(BIN): $(LINKOBJ)
+#	$(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
+	$(CPP) $(LINKOBJ) $(LIBS) -o $(BIN) -mdll
+
+objbase/maindll.o: ../filter/base/maindll.cpp
+	$(CPP) -c ../filter/base/maindll.cpp -o objbase/maindll.o $(CXXFLAGS)
+
+objbase/debug.o: ../filter/base/debug.cpp
+	$(CPP) -c ../filter/base/debug.cpp -o objbase/debug.o $(CXXFLAGS)
diff --git a/plugins/YAMN/mingw/simple.dev b/plugins/YAMN/mingw/simple.dev
new file mode 100644
index 0000000000..617324b551
--- /dev/null
+++ b/plugins/YAMN/mingw/simple.dev
@@ -0,0 +1,59 @@
+[Project]
+FileName=simple.dev
+Name=simple
+Ver=1
+IsCpp=1
+Type=3
+Compiler=-D__GNUWIN32__ -mcpu=i486 -D_M_IX86=400 -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS_@@_
+CppCompiler=-D__GNUWIN32__ -mcpu=i486 -D_M_IX86=400 -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS_@@_
+Includes=../../../include
+Linker=-lkernel32 -luser32_@@_
+Libs=
+UnitCount=1
+Folders="Header Files","Resource Files","Source Files"
+ObjFiles=
+PrivateResource=
+ResourceIncludes=
+MakeIncludes=
+Icon=
+ExeOutput=binfilter
+ObjectOutput=objsimple
+OverrideOutput=0
+OverrideOutputName=simple.dll
+HostApplication=
+CommandLine=
+UseCustomMakefile=1
+CustomMakefile=simple.win
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=0010000001001000000100
+
+[Unit1]
+FileName=..\filter\Simple\maindll.cpp
+Folder="Source Files"
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=0.1
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=simple.dll
+ProductName=simple
+ProductVersion=0.1
+AutoIncBuildNr=0
+
diff --git a/plugins/YAMN/mingw/simple.win b/plugins/YAMN/mingw/simple.win
new file mode 100644
index 0000000000..fc9e3c611e
--- /dev/null
+++ b/plugins/YAMN/mingw/simple.win
@@ -0,0 +1,35 @@
+# Project: simple
+# Makefile created by Dev-C++ 4.9.9.2
+
+CPP  = g++.exe
+CC   = gcc.exe
+WINDRES = windres.exe
+RES  = 
+OBJ  = objsimple/maindll.o $(RES)
+LINKOBJ  = objsimple/maindll.o $(RES)
+LIBS =  -lkernel32 -luser32 -s 
+INCS =  -I"../../../include" 
+CXXINCS =  -I"../../../include" 
+BIN  = binfilter/simple.dll
+CXXFLAGS = $(CXXINCS) -D__GNUWIN32__ -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS   -w -fweb -frename-registers -Os
+CFLAGS = $(INCS) -D__GNUWIN32__ -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS   -w -fweb -frename-registers -Os
+RM = rm -f
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before binfilter/simple.dll all-after
+
+
+clean: clean-custom
+	${RM} $(OBJ) $(BIN)
+
+DLLWRAP=dllwrap.exe
+DEFFILE=objsimple/libsimple.def
+STATICLIB=objsimple/libsimple.a
+
+$(BIN): $(LINKOBJ)
+#	$(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
+	$(CPP) $(LINKOBJ) $(LIBS) -o $(BIN) -mdll
+
+objsimple/maindll.o: ../filter/Simple/maindll.cpp
+	$(CPP) -c ../filter/Simple/maindll.cpp -o objsimple/maindll.o $(CXXFLAGS)
diff --git a/plugins/YAMN/mingw/yamn-2in1.dev b/plugins/YAMN/mingw/yamn-2in1.dev
new file mode 100644
index 0000000000..615e63f7ac
--- /dev/null
+++ b/plugins/YAMN/mingw/yamn-2in1.dev
@@ -0,0 +1,469 @@
+[Project]
+FileName=yamn-2in1.dev
+Name=YAMN
+Ver=1
+IsCpp=1
+Type=3
+Compiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -DWIN2IN1
+CppCompiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -DWIN2IN1
+Includes=../../../include
+Linker=-lunicows -lkernel32 -luser32 -lshell32 -lmsvcrt -lcomctl32 -lcomdlg32 -lgdi32 -lwsock32 --image-base "0x60010000" 
+Libs=../libs
+UnitCount=36
+Folders=Documentation,"Resource Files",YAMN,YAMN/Header,YAMN/include,"YAMN/Mail browser, dialogs",YAMN/Mails,"YAMN/POP3 plugin"
+ObjFiles=
+PrivateResource=YAMN_private.rc
+ResourceIncludes=../resources
+MakeIncludes=
+Icon=
+ExeOutput=bin2in1
+ObjectOutput=objs2in1
+OverrideOutput=1
+OverrideOutputName=YAMN.dll
+HostApplication=
+CommandLine=
+UseCustomMakefile=1
+CustomMakefile=yamn-2in1.win
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=0010000001001000000100
+
+[Unit1]
+FileName=..\browser\badconnect.cpp
+Folder=YAMN/Mail browser, dialogs
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=..\browser\mailbrowser.cpp
+Folder=YAMN/Mail browser, dialogs
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit3]
+FileName=..\mails\decode.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit4]
+FileName=..\mails\mails.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit5]
+FileName=..\mails\mime.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit6]
+FileName=..\proto\md5.c
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=0
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit7]
+FileName=..\proto\netlib.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit8]
+FileName=..\proto\pop3\pop3.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit9]
+FileName=..\proto\pop3\pop3comm.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit10]
+FileName=..\proto\pop3\pop3opt.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit11]
+FileName=..\proto\ssl.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit12]
+FileName=..\debug.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit13]
+FileName=..\main.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit14]
+FileName=..\proto\pop3\pop3.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit15]
+FileName=..\proto\pop3\pop3comm.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit16]
+FileName=..\proto\pop3\pop3opt.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit17]
+FileName=..\yamn.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit18]
+FileName=..\include\m_kbdnotify.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit19]
+FileName=..\include\m_popup.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit20]
+FileName=..\include\m_toptoolbar.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit21]
+FileName=..\include\m_uninstaller.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit22]
+FileName=..\include\m_updater.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit23]
+FileName=..\account.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit24]
+FileName=..\ChangeLog.txt
+Folder=Documentation
+Compile=0
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit25]
+FileName=..\debug.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit26]
+FileName=..\filterplugin.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit27]
+FileName=..\main.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit28]
+FileName=..\protoplugin.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit29]
+FileName=..\services.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit30]
+FileName=..\synchro.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit31]
+FileName=..\yamn.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit32]
+FileName=..\resources\ttbfcheck.bmp
+Folder=Resource Files
+Compile=0
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit33]
+FileName=..\resources\YAMN.rc
+Folder=Resource Files
+Compile=1
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit34]
+FileName=..\docs\language.pop3.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit35]
+FileName=..\docs\language.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit36]
+FileName=..\m_messages.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit37]
+FileName=..\resources\icoyamn2.ico
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit38]
+FileName=..\resources\icoyamn3.ico
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit39]
+FileName=..\resources\ttbfcheck.bmp
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit40]
+FileName=..\resources\YAMN.rc
+Folder=Resource Files
+Compile=1
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit41]
+FileName=..\docs\language.pop3.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit42]
+FileName=..\docs\language.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=0.1
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=YAMN.exe
+ProductName=YAMN
+ProductVersion=0.1
+AutoIncBuildNr=0
+
diff --git a/plugins/YAMN/mingw/yamn-2in1.win b/plugins/YAMN/mingw/yamn-2in1.win
new file mode 100644
index 0000000000..5b90f86916
--- /dev/null
+++ b/plugins/YAMN/mingw/yamn-2in1.win
@@ -0,0 +1,92 @@
+# Project: YAMN
+# Makefile created by Dev-C++ 4.9.9.2
+
+CPP  = g++.exe
+CC   = gcc.exe
+WINDRES = windres.exe
+RES  = objs2in1/YAMN.res
+OBJ  = objs2in1/badconnect.o objs2in1/mailbrowser.o objs2in1/decode.o objs2in1/mails.o objs2in1/mime.o objs2in1/md5.o objs2in1/netlib.o objs2in1/pop3.o objs2in1/pop3comm.o objs2in1/pop3opt.o objs2in1/ssl.o objs2in1/account.o objs2in1/debug.o objs2in1/filterplugin.o objs2in1/main.o objs2in1/protoplugin.o objs2in1/services.o objs2in1/synchro.o objs2in1/yamn.o $(RES)
+LINKOBJ  = objs2in1/badconnect.o objs2in1/mailbrowser.o objs2in1/decode.o objs2in1/mails.o objs2in1/mime.o objs2in1/md5.o objs2in1/netlib.o objs2in1/pop3.o objs2in1/pop3comm.o objs2in1/pop3opt.o objs2in1/ssl.o objs2in1/account.o objs2in1/debug.o objs2in1/filterplugin.o objs2in1/main.o objs2in1/protoplugin.o objs2in1/services.o objs2in1/synchro.o objs2in1/yamn.o $(RES)
+LIBS =  -L"../libs" -lunicows -lkernel32 -luser32 -lshell32 -lmsvcrt -lcomctl32 -lcomdlg32 -lgdi32 -lwsock32 -s 
+INCS =  -I"../../../include" 
+CXXINCS =  -I"../../../include" 
+BIN  = bin2in1/yamn.dll
+CXXFLAGS = $(CXXINCS) -D__GNUWIN32__ -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS -DWIN2IN1 -w -fweb -frename-registers -Os
+CFLAGS = $(INCS) -D__GNUWIN32__ -W -fno-inline -DWIN32 -DNDEBUG -D_WINDOWS -DWIN2IN1 -w -fweb -frename-registers -Os
+RM = rm -f
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before bin2in1/yamn.dll all-after
+
+
+clean: clean-custom
+	${RM} $(OBJ) $(BIN)
+
+DLLWRAP=dllwrap.exe
+DEFFILE=bin2in1/libYAMN.def
+STATICLIB=bin2in1/libYAMN.a
+
+$(BIN): $(LINKOBJ)
+#	$(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
+	$(CPP) $(LINKOBJ) $(LIBS) -o $(BIN) -mdll
+
+objs2in1/badconnect.o: ../browser/badconnect.cpp
+	$(CPP) -c ../browser/badconnect.cpp -o objs2in1/badconnect.o $(CXXFLAGS)
+
+objs2in1/mailbrowser.o: ../browser/mailbrowser.cpp
+	$(CPP) -c ../browser/mailbrowser.cpp -o objs2in1/mailbrowser.o $(CXXFLAGS)
+
+objs2in1/decode.o: ../mails/decode.cpp
+	$(CPP) -c ../mails/decode.cpp -o objs2in1/decode.o $(CXXFLAGS)
+
+objs2in1/mails.o: ../mails/mails.cpp
+	$(CPP) -c ../mails/mails.cpp -o objs2in1/mails.o $(CXXFLAGS)
+
+objs2in1/mime.o: ../mails/mime.cpp
+	$(CPP) -c ../mails/mime.cpp -o objs2in1/mime.o $(CXXFLAGS)
+
+objs2in1/md5.o: ../proto/md5.c
+	$(CC) -c ../proto/md5.c -o objs2in1/md5.o $(CFLAGS)
+
+objs2in1/netlib.o: ../proto/netlib.cpp
+	$(CPP) -c ../proto/netlib.cpp -o objs2in1/netlib.o $(CXXFLAGS)
+
+objs2in1/pop3.o: ../proto/pop3/pop3.cpp
+	$(CPP) -c ../proto/pop3/pop3.cpp -o objs2in1/pop3.o $(CXXFLAGS)
+
+objs2in1/pop3comm.o: ../proto/pop3/pop3comm.cpp
+	$(CPP) -c ../proto/pop3/pop3comm.cpp -o objs2in1/pop3comm.o $(CXXFLAGS)
+
+objs2in1/pop3opt.o: ../proto/pop3/pop3opt.cpp
+	$(CPP) -c ../proto/pop3/pop3opt.cpp -o objs2in1/pop3opt.o $(CXXFLAGS)
+
+objs2in1/ssl.o: ../proto/ssl.cpp
+	$(CPP) -c ../proto/ssl.cpp -o objs2in1/ssl.o $(CXXFLAGS)
+
+objs2in1/account.o: ../account.cpp
+	$(CPP) -c ../account.cpp -o objs2in1/account.o $(CXXFLAGS)
+
+objs2in1/debug.o: ../debug.cpp
+	$(CPP) -c ../debug.cpp -o objs2in1/debug.o $(CXXFLAGS)
+
+objs2in1/filterplugin.o: ../filterplugin.cpp
+	$(CPP) -c ../filterplugin.cpp -o objs2in1/filterplugin.o $(CXXFLAGS)
+
+objs2in1/main.o: ../main.cpp
+	$(CPP) -c ../main.cpp -o objs2in1/main.o $(CXXFLAGS)
+
+objs2in1/protoplugin.o: ../protoplugin.cpp
+	$(CPP) -c ../protoplugin.cpp -o objs2in1/protoplugin.o $(CXXFLAGS)
+
+objs2in1/services.o: ../services.cpp
+	$(CPP) -c ../services.cpp -o objs2in1/services.o $(CXXFLAGS)
+
+objs2in1/synchro.o: ../synchro.cpp
+	$(CPP) -c ../synchro.cpp -o objs2in1/synchro.o $(CXXFLAGS)
+
+objs2in1/yamn.o: ../yamn.cpp
+	$(CPP) -c ../yamn.cpp -o objs2in1/yamn.o $(CXXFLAGS)
+
+objs2in1/YAMN.res: ../resources/YAMN.rc
+	$(WINDRES) -i ../resources/YAMN.rc --input-format=rc -o objs2in1/YAMN.res -O coff  --include-dir ../resources
diff --git a/plugins/YAMN/mingw/yamn-w9x.dev b/plugins/YAMN/mingw/yamn-w9x.dev
new file mode 100644
index 0000000000..b652000edf
--- /dev/null
+++ b/plugins/YAMN/mingw/yamn-w9x.dev
@@ -0,0 +1,469 @@
+[Project]
+FileName=yamn-w9x.dev
+Name=YAMN
+Ver=1
+IsCpp=1
+Type=3
+Compiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -DWIN9X
+CppCompiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -DWIN9X
+Includes=../../../include
+Linker=-lunicows -lkernel32 -luser32 -lshell32 -lmsvcrt -lcomctl32 -lcomdlg32 -lgdi32 -lwsock32 --image-base "0x60010000" 
+Libs=../libs
+UnitCount=36
+Folders=Documentation,"Resource Files",YAMN,YAMN/Header,YAMN/include,"YAMN/Mail browser, dialogs",YAMN/Mails,"YAMN/POP3 plugin"
+ObjFiles=
+PrivateResource=YAMN_private.rc
+ResourceIncludes=../resources
+MakeIncludes=
+Icon=
+ExeOutput=bin9x
+ObjectOutput=objs9x
+OverrideOutput=1
+OverrideOutputName=YAMN.dll
+HostApplication=
+CommandLine=
+UseCustomMakefile=1
+CustomMakefile=yamn-w9x.win
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=0010000001001000000100
+
+[Unit1]
+FileName=..\browser\badconnect.cpp
+Folder=YAMN/Mail browser, dialogs
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=..\browser\mailbrowser.cpp
+Folder=YAMN/Mail browser, dialogs
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit3]
+FileName=..\mails\decode.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit4]
+FileName=..\mails\mails.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit5]
+FileName=..\mails\mime.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit6]
+FileName=..\proto\md5.c
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=0
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit7]
+FileName=..\proto\netlib.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit8]
+FileName=..\proto\pop3\pop3.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit9]
+FileName=..\proto\pop3\pop3comm.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit10]
+FileName=..\proto\pop3\pop3opt.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit11]
+FileName=..\proto\ssl.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit12]
+FileName=..\debug.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit13]
+FileName=..\main.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit14]
+FileName=..\proto\pop3\pop3.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit15]
+FileName=..\proto\pop3\pop3comm.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit16]
+FileName=..\proto\pop3\pop3opt.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit17]
+FileName=..\yamn.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit18]
+FileName=..\include\m_kbdnotify.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit19]
+FileName=..\include\m_popup.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit20]
+FileName=..\include\m_toptoolbar.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit21]
+FileName=..\include\m_uninstaller.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit22]
+FileName=..\include\m_updater.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit23]
+FileName=..\account.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit24]
+FileName=..\ChangeLog.txt
+Folder=Documentation
+Compile=0
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit25]
+FileName=..\debug.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit26]
+FileName=..\filterplugin.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit27]
+FileName=..\main.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit28]
+FileName=..\protoplugin.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit29]
+FileName=..\services.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit30]
+FileName=..\synchro.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit31]
+FileName=..\yamn.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit32]
+FileName=..\resources\ttbfcheck.bmp
+Folder=Resource Files
+Compile=0
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit33]
+FileName=..\resources\YAMN.rc
+Folder=Resource Files
+Compile=1
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit34]
+FileName=..\docs\language.pop3.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit35]
+FileName=..\docs\language.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit36]
+FileName=..\m_messages.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit37]
+FileName=..\resources\icoyamn2.ico
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit38]
+FileName=..\resources\icoyamn3.ico
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit39]
+FileName=..\resources\ttbfcheck.bmp
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit40]
+FileName=..\resources\YAMN.rc
+Folder=Resource Files
+Compile=1
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit41]
+FileName=..\docs\language.pop3.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit42]
+FileName=..\docs\language.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=0.1
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=YAMN.exe
+ProductName=YAMN
+ProductVersion=0.1
+AutoIncBuildNr=0
+
diff --git a/plugins/YAMN/mingw/yamn-w9x.win b/plugins/YAMN/mingw/yamn-w9x.win
new file mode 100644
index 0000000000..0e741d564e
--- /dev/null
+++ b/plugins/YAMN/mingw/yamn-w9x.win
@@ -0,0 +1,92 @@
+# Project: YAMN
+# Makefile created by Dev-C++ 4.9.9.2
+
+CPP  = g++.exe
+CC   = gcc.exe
+WINDRES = windres.exe
+RES  = objs9x/YAMN.res
+OBJ  = objs9x/badconnect.o objs9x/mailbrowser.o objs9x/decode.o objs9x/mails.o objs9x/mime.o objs9x/md5.o objs9x/netlib.o objs9x/pop3.o objs9x/pop3comm.o objs9x/pop3opt.o objs9x/ssl.o objs9x/account.o objs9x/debug.o objs9x/filterplugin.o objs9x/main.o objs9x/protoplugin.o objs9x/services.o objs9x/synchro.o objs9x/yamn.o $(RES)
+LINKOBJ  = objs9x/badconnect.o objs9x/mailbrowser.o objs9x/decode.o objs9x/mails.o objs9x/mime.o objs9x/md5.o objs9x/netlib.o objs9x/pop3.o objs9x/pop3comm.o objs9x/pop3opt.o objs9x/ssl.o objs9x/account.o objs9x/debug.o objs9x/filterplugin.o objs9x/main.o objs9x/protoplugin.o objs9x/services.o objs9x/synchro.o objs9x/yamn.o $(RES)
+LIBS =  -L"../libs" -lunicows -lkernel32 -luser32 -lshell32 -lmsvcrt -lcomctl32 -lcomdlg32 -lgdi32 -lwsock32 -s 
+INCS =  -I"../../../include" 
+CXXINCS =  -I"../../../include" 
+BIN  = bin9x/yamn.dll
+CXXFLAGS = $(CXXINCS) -D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -DWIN9X -w -fweb -frename-registers -Os
+CFLAGS = $(INCS) -D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -DWIN9X -w -fweb -frename-registers -Os
+RM = rm -f
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before bin9x/yamn.dll all-after
+
+
+clean: clean-custom
+	${RM} $(OBJ) $(BIN)
+
+DLLWRAP=dllwrap.exe
+DEFFILE=bin9x/libYAMN.def
+STATICLIB=bin9x/libYAMN.a
+
+$(BIN): $(LINKOBJ)
+#	$(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
+	$(CPP) $(LINKOBJ) $(LIBS) -o $(BIN) -mdll
+
+objs9x/badconnect.o: ../browser/badconnect.cpp
+	$(CPP) -c ../browser/badconnect.cpp -o objs9x/badconnect.o $(CXXFLAGS)
+
+objs9x/mailbrowser.o: ../browser/mailbrowser.cpp
+	$(CPP) -c ../browser/mailbrowser.cpp -o objs9x/mailbrowser.o $(CXXFLAGS)
+
+objs9x/decode.o: ../mails/decode.cpp
+	$(CPP) -c ../mails/decode.cpp -o objs9x/decode.o $(CXXFLAGS)
+
+objs9x/mails.o: ../mails/mails.cpp
+	$(CPP) -c ../mails/mails.cpp -o objs9x/mails.o $(CXXFLAGS)
+
+objs9x/mime.o: ../mails/mime.cpp
+	$(CPP) -c ../mails/mime.cpp -o objs9x/mime.o $(CXXFLAGS)
+
+objs9x/md5.o: ../proto/md5.c
+	$(CC) -c ../proto/md5.c -o objs9x/md5.o $(CFLAGS)
+
+objs9x/netlib.o: ../proto/netlib.cpp
+	$(CPP) -c ../proto/netlib.cpp -o objs9x/netlib.o $(CXXFLAGS)
+
+objs9x/pop3.o: ../proto/pop3/pop3.cpp
+	$(CPP) -c ../proto/pop3/pop3.cpp -o objs9x/pop3.o $(CXXFLAGS)
+
+objs9x/pop3comm.o: ../proto/pop3/pop3comm.cpp
+	$(CPP) -c ../proto/pop3/pop3comm.cpp -o objs9x/pop3comm.o $(CXXFLAGS)
+
+objs9x/pop3opt.o: ../proto/pop3/pop3opt.cpp
+	$(CPP) -c ../proto/pop3/pop3opt.cpp -o objs9x/pop3opt.o $(CXXFLAGS)
+
+objs9x/ssl.o: ../proto/ssl.cpp
+	$(CPP) -c ../proto/ssl.cpp -o objs9x/ssl.o $(CXXFLAGS)
+
+objs9x/account.o: ../account.cpp
+	$(CPP) -c ../account.cpp -o objs9x/account.o $(CXXFLAGS)
+
+objs9x/debug.o: ../debug.cpp
+	$(CPP) -c ../debug.cpp -o objs9x/debug.o $(CXXFLAGS)
+
+objs9x/filterplugin.o: ../filterplugin.cpp
+	$(CPP) -c ../filterplugin.cpp -o objs9x/filterplugin.o $(CXXFLAGS)
+
+objs9x/main.o: ../main.cpp
+	$(CPP) -c ../main.cpp -o objs9x/main.o $(CXXFLAGS)
+
+objs9x/protoplugin.o: ../protoplugin.cpp
+	$(CPP) -c ../protoplugin.cpp -o objs9x/protoplugin.o $(CXXFLAGS)
+
+objs9x/services.o: ../services.cpp
+	$(CPP) -c ../services.cpp -o objs9x/services.o $(CXXFLAGS)
+
+objs9x/synchro.o: ../synchro.cpp
+	$(CPP) -c ../synchro.cpp -o objs9x/synchro.o $(CXXFLAGS)
+
+objs9x/yamn.o: ../yamn.cpp
+	$(CPP) -c ../yamn.cpp -o objs9x/yamn.o $(CXXFLAGS)
+
+objs9x/YAMN.res: ../resources/YAMN.rc
+	$(WINDRES) -i ../resources/YAMN.rc --input-format=rc -o objs9x/YAMN.res -O coff  --include-dir ../resources
diff --git a/plugins/YAMN/mingw/yamn.dev b/plugins/YAMN/mingw/yamn.dev
new file mode 100644
index 0000000000..d726894665
--- /dev/null
+++ b/plugins/YAMN/mingw/yamn.dev
@@ -0,0 +1,469 @@
+[Project]
+FileName=yamn.dev
+Name=YAMN
+Ver=1
+IsCpp=1
+Type=3
+Compiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS
+CppCompiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS
+Includes=../../../include
+Linker=-lkernel32 -luser32 -lshell32 -lmsvcrt -lcomctl32 -lcomdlg32 -lgdi32 -lwsock32 --image-base "0x60010000"
+Libs=
+UnitCount=36
+Folders=Documentation,"Resource Files",YAMN,YAMN/Header,YAMN/include,"YAMN/Mail browser, dialogs",YAMN/Mails,"YAMN/POP3 plugin"
+ObjFiles=
+PrivateResource=YAMN_private.rc
+ResourceIncludes=../resources
+MakeIncludes=
+Icon=
+ExeOutput=bin
+ObjectOutput=objs
+OverrideOutput=0
+OverrideOutputName=YAMN.dll
+HostApplication=
+CommandLine=
+UseCustomMakefile=1
+CustomMakefile=yamn.win
+IncludeVersionInfo=0
+SupportXPThemes=0
+CompilerSet=0
+CompilerSettings=0000000001001000000100
+
+[Unit1]
+FileName=..\browser\badconnect.cpp
+Folder=YAMN/Mail browser, dialogs
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit2]
+FileName=..\browser\mailbrowser.cpp
+Folder=YAMN/Mail browser, dialogs
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit3]
+FileName=..\mails\decode.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit4]
+FileName=..\mails\mails.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit5]
+FileName=..\mails\mime.cpp
+Folder=YAMN/Mails
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit6]
+FileName=..\proto\md5.c
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=0
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit7]
+FileName=..\proto\netlib.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit8]
+FileName=..\proto\pop3\pop3.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit9]
+FileName=..\proto\pop3\pop3comm.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit10]
+FileName=..\proto\pop3\pop3opt.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit11]
+FileName=..\proto\ssl.cpp
+Folder=YAMN/POP3 plugin
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit12]
+FileName=..\debug.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit13]
+FileName=..\main.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit14]
+FileName=..\proto\pop3\pop3.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit15]
+FileName=..\proto\pop3\pop3comm.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit16]
+FileName=..\proto\pop3\pop3opt.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit17]
+FileName=..\yamn.h
+Folder=YAMN/Header
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit18]
+FileName=..\include\m_kbdnotify.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit19]
+FileName=..\include\m_popup.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit20]
+FileName=..\include\m_toptoolbar.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit21]
+FileName=..\include\m_uninstaller.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit22]
+FileName=..\include\m_updater.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit23]
+FileName=..\account.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit24]
+FileName=..\ChangeLog.txt
+Folder=Documentation
+Compile=0
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit25]
+FileName=..\debug.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit26]
+FileName=..\filterplugin.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit27]
+FileName=..\main.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit28]
+FileName=..\protoplugin.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit29]
+FileName=..\services.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit30]
+FileName=..\synchro.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit31]
+FileName=..\yamn.cpp
+Folder=YAMN
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit32]
+FileName=..\resources\ttbfcheck.bmp
+Folder=Resource Files
+Compile=0
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit33]
+FileName=..\resources\YAMN.rc
+Folder=Resource Files
+Compile=1
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit34]
+FileName=..\docs\language.pop3.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit35]
+FileName=..\docs\language.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit36]
+FileName=..\m_messages.h
+Folder=YAMN/include
+Compile=1
+CompileCpp=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit37]
+FileName=..\resources\icoyamn2.ico
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit38]
+FileName=..\resources\icoyamn3.ico
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit39]
+FileName=..\resources\ttbfcheck.bmp
+Folder=Resource Files
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit40]
+FileName=..\resources\YAMN.rc
+Folder=Resource Files
+Compile=1
+CompileCpp=1
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit41]
+FileName=..\docs\language.pop3.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit42]
+FileName=..\docs\language.txt
+Folder=Documentation
+Compile=0
+CompileCpp=0
+Link=0
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[VersionInfo]
+Major=0
+Minor=1
+Release=1
+Build=1
+LanguageID=1033
+CharsetID=1252
+CompanyName=
+FileVersion=0.1
+FileDescription=Developed using the Dev-C++ IDE
+InternalName=
+LegalCopyright=
+LegalTrademarks=
+OriginalFilename=YAMN.exe
+ProductName=YAMN
+ProductVersion=0.1
+AutoIncBuildNr=0
+
diff --git a/plugins/YAMN/mingw/yamn.win b/plugins/YAMN/mingw/yamn.win
new file mode 100644
index 0000000000..d396e45fca
--- /dev/null
+++ b/plugins/YAMN/mingw/yamn.win
@@ -0,0 +1,92 @@
+# Project: YAMN
+# Makefile created by Dev-C++ 4.9.9.2
+
+CPP  = g++.exe
+CC   = gcc.exe
+WINDRES = windres.exe
+RES  = objs/YAMN.res
+OBJ  = objs/badconnect.o objs/mailbrowser.o objs/decode.o objs/mails.o objs/mime.o objs/md5.o objs/netlib.o objs/pop3.o objs/pop3comm.o objs/pop3opt.o objs/ssl.o objs/account.o objs/debug.o objs/filterplugin.o objs/main.o objs/protoplugin.o objs/services.o objs/synchro.o objs/yamn.o $(RES)
+LINKOBJ  = objs/badconnect.o objs/mailbrowser.o objs/decode.o objs/mails.o objs/mime.o objs/md5.o objs/netlib.o objs/pop3.o objs/pop3comm.o objs/pop3opt.o objs/ssl.o objs/account.o objs/debug.o objs/filterplugin.o objs/main.o objs/protoplugin.o objs/services.o objs/synchro.o objs/yamn.o $(RES)
+LIBS =  -lkernel32 -luser32 -lshell32 -lmsvcrt -lcomctl32 -lcomdlg32 -lgdi32 -lwsock32 -s
+INCS =  -I"../../../include"
+CXXINCS =  -I"../../../include"
+BIN  = bin/yamn.dll
+CXXFLAGS = $(CXXINCS) -D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -w -fweb -frename-registers -Os
+CFLAGS = $(INCS) -D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -w -fweb -frename-registers -Os
+RM = rm -f
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before bin/yamn.dll all-after
+
+
+clean: clean-custom
+	${RM} $(OBJ) $(BIN)
+
+DLLWRAP=dllwrap.exe
+DEFFILE=bin/libyamn.def
+STATICLIB=bin/libyamn.a
+
+$(BIN): $(LINKOBJ)
+#	$(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)
+	$(CPP) $(LINKOBJ) $(LIBS) -o $(BIN) -mdll
+
+objs/badconnect.o: ../browser/badconnect.cpp
+	$(CPP) -c ../browser/badconnect.cpp -o objs/badconnect.o $(CXXFLAGS)
+
+objs/mailbrowser.o: ../browser/mailbrowser.cpp
+	$(CPP) -c ../browser/mailbrowser.cpp -o objs/mailbrowser.o $(CXXFLAGS)
+
+objs/decode.o: ../mails/decode.cpp
+	$(CPP) -c ../mails/decode.cpp -o objs/decode.o $(CXXFLAGS)
+
+objs/mails.o: ../mails/mails.cpp
+	$(CPP) -c ../mails/mails.cpp -o objs/mails.o $(CXXFLAGS)
+
+objs/mime.o: ../mails/mime.cpp
+	$(CPP) -c ../mails/mime.cpp -o objs/mime.o $(CXXFLAGS)
+
+objs/md5.o: ../proto/md5.c
+	$(CC) -c ../proto/md5.c -o objs/md5.o $(CFLAGS)
+
+objs/netlib.o: ../proto/netlib.cpp
+	$(CPP) -c ../proto/netlib.cpp -o objs/netlib.o $(CXXFLAGS)
+
+objs/pop3.o: ../proto/pop3/pop3.cpp
+	$(CPP) -c ../proto/pop3/pop3.cpp -o objs/pop3.o $(CXXFLAGS)
+
+objs/pop3comm.o: ../proto/pop3/pop3comm.cpp
+	$(CPP) -c ../proto/pop3/pop3comm.cpp -o objs/pop3comm.o $(CXXFLAGS)
+
+objs/pop3opt.o: ../proto/pop3/pop3opt.cpp
+	$(CPP) -c ../proto/pop3/pop3opt.cpp -o objs/pop3opt.o $(CXXFLAGS)
+
+objs/ssl.o: ../proto/ssl.cpp
+	$(CPP) -c ../proto/ssl.cpp -o objs/ssl.o $(CXXFLAGS)
+
+objs/account.o: ../account.cpp
+	$(CPP) -c ../account.cpp -o objs/account.o $(CXXFLAGS)
+
+objs/debug.o: ../debug.cpp
+	$(CPP) -c ../debug.cpp -o objs/debug.o $(CXXFLAGS)
+
+objs/filterplugin.o: ../filterplugin.cpp
+	$(CPP) -c ../filterplugin.cpp -o objs/filterplugin.o $(CXXFLAGS)
+
+objs/main.o: ../main.cpp
+	$(CPP) -c ../main.cpp -o objs/main.o $(CXXFLAGS)
+
+objs/protoplugin.o: ../protoplugin.cpp
+	$(CPP) -c ../protoplugin.cpp -o objs/protoplugin.o $(CXXFLAGS)
+
+objs/services.o: ../services.cpp
+	$(CPP) -c ../services.cpp -o objs/services.o $(CXXFLAGS)
+
+objs/synchro.o: ../synchro.cpp
+	$(CPP) -c ../synchro.cpp -o objs/synchro.o $(CXXFLAGS)
+
+objs/yamn.o: ../yamn.cpp
+	$(CPP) -c ../yamn.cpp -o objs/yamn.o $(CXXFLAGS)
+
+objs/YAMN.res: ../resources/YAMN.rc
+	$(WINDRES) -i ../resources/YAMN.rc --input-format=rc -o objs/YAMN.res -O coff  --include-dir ../resources
diff --git a/plugins/YAMN/proto/md5.c b/plugins/YAMN/proto/md5.c
new file mode 100644
index 0000000000..25546d2a65
--- /dev/null
+++ b/plugins/YAMN/proto/md5.c
@@ -0,0 +1,260 @@
+/*
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest.  This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ */
+//#include <string.h>		/* for memcpy() */
+#if defined(_WIN64)
+	typedef unsigned __int64 size_t;
+#else
+	typedef unsigned int size_t;
+	#include "../filter/simple/AggressiveOptimize.h"
+#endif
+void *  __cdecl memcpy(void *, const void *, size_t);
+void *  __cdecl memset(void *, int, size_t);
+#include "md5.h"
+
+#ifndef HIGHFIRST
+#define byteReverse(buf, len)	/* Nothing */
+#else
+void byteReverse(unsigned char *buf, unsigned longs);
+
+#ifndef ASM_MD5
+/*
+ * Note: this code is harmless on little-endian machines.
+ */
+void byteReverse(unsigned char *buf, unsigned longs)
+{
+    uint32 t;
+    do {
+	t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
+	    ((unsigned) buf[1] << 8 | buf[0]);
+	*(uint32 *) buf = t;
+	buf += 4;
+    } while (--longs);
+}
+#endif
+#endif
+
+/*
+ * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
+ * initialization constants.
+ */
+void MD5Init(struct MD5Context *ctx)
+{
+    ctx->buf[0] = 0x67452301;
+    ctx->buf[1] = 0xefcdab89;
+    ctx->buf[2] = 0x98badcfe;
+    ctx->buf[3] = 0x10325476;
+
+    ctx->bits[0] = 0;
+    ctx->bits[1] = 0;
+}
+
+/*
+ * Update context to reflect the concatenation of another buffer full
+ * of bytes.
+ */
+void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
+{
+    uint32 t;
+
+    /* Update bitcount */
+
+    t = ctx->bits[0];
+    if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
+	ctx->bits[1]++;		/* Carry from low to high */
+    ctx->bits[1] += len >> 29;
+
+    t = (t >> 3) & 0x3f;	/* Bytes already in shsInfo->data */
+
+    /* Handle any leading odd-sized chunks */
+
+    if (t) {
+	unsigned char *p = (unsigned char *) ctx->in + t;
+
+	t = 64 - t;
+	if (len < t) {
+	    memcpy(p, buf, len);
+	    return;
+	}
+	memcpy(p, buf, t);
+	byteReverse(ctx->in, 16);
+	MD5Transform(ctx->buf, (uint32 *) ctx->in);
+	buf += t;
+	len -= t;
+    }
+    /* Process data in 64-byte chunks */
+
+    while (len >= 64) {
+	memcpy(ctx->in, buf, 64);
+	byteReverse(ctx->in, 16);
+	MD5Transform(ctx->buf, (uint32 *) ctx->in);
+	buf += 64;
+	len -= 64;
+    }
+
+    /* Handle any remaining bytes of data. */
+
+    memcpy(ctx->in, buf, len);
+}
+
+/*
+ * Final wrapup - pad to 64-byte boundary with the bit pattern 
+ * 1 0* (64-bit count of bits processed, MSB-first)
+ */
+void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
+{
+    unsigned count;
+    unsigned char *p;
+
+    /* Compute number of bytes mod 64 */
+    count = (ctx->bits[0] >> 3) & 0x3F;
+
+    /* Set the first char of padding to 0x80.  This is safe since there is
+       always at least one byte free */
+    p = ctx->in + count;
+    *p++ = 0x80;
+
+    /* Bytes of padding needed to make 64 bytes */
+    count = 64 - 1 - count;
+
+    /* Pad out to 56 mod 64 */
+    if (count < 8) {
+	/* Two lots of padding:  Pad the first block to 64 bytes */
+	memset(p, 0, count);
+	byteReverse(ctx->in, 16);
+	MD5Transform(ctx->buf, (uint32 *) ctx->in);
+
+	/* Now fill the next block with 56 bytes */
+	memset(ctx->in, 0, 56);
+    } else {
+	/* Pad block to 56 bytes */
+	memset(p, 0, count - 8);
+    }
+    byteReverse(ctx->in, 14);
+
+    /* Append length in bits and transform */
+    ((uint32 *) ctx->in)[14] = ctx->bits[0];
+    ((uint32 *) ctx->in)[15] = ctx->bits[1];
+
+    MD5Transform(ctx->buf, (uint32 *) ctx->in);
+    byteReverse((unsigned char *) ctx->buf, 4);
+    memcpy(digest, ctx->buf, 16);
+    memset(ctx, 0, sizeof(ctx));	/* In case it's sensitive */
+}
+
+#ifndef ASM_MD5
+
+/* The four core functions - F1 is optimized somewhat */
+
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f, w, x, y, z, data, s) \
+	( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )
+
+/*
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data.  MD5Update blocks
+ * the data and converts bytes into longwords for this routine.
+ */
+void MD5Transform(uint32 buf[4], uint32 const in[16])
+{
+    register uint32 a, b, c, d;
+
+    a = buf[0];
+    b = buf[1];
+    c = buf[2];
+    d = buf[3];
+
+    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+
+    buf[0] += a;
+    buf[1] += b;
+    buf[2] += c;
+    buf[3] += d;
+}
+
+#endif
diff --git a/plugins/YAMN/proto/md5.h b/plugins/YAMN/proto/md5.h
new file mode 100644
index 0000000000..e264f686db
--- /dev/null
+++ b/plugins/YAMN/proto/md5.h
@@ -0,0 +1,27 @@
+#ifndef MD5_H
+#define MD5_H
+
+#ifdef __alpha
+typedef unsigned int uint32;
+#else
+typedef unsigned long uint32;
+#endif
+
+struct MD5Context {
+	uint32 buf[4];
+	uint32 bits[2];
+	unsigned char in[64];
+};
+
+void MD5Init(struct MD5Context *context);
+void MD5Update(struct MD5Context *context, unsigned char const *buf,
+	       unsigned len);
+void MD5Final(unsigned char digest[16], struct MD5Context *context);
+void MD5Transform(uint32 buf[4], uint32 const in[16]);
+
+/*
+ * This is needed to make RSAREF happy on some MS-DOS compilers.
+ */
+typedef struct MD5Context MD5_CTX;
+
+#endif /* !MD5_H */
diff --git a/plugins/YAMN/proto/netclient.h b/plugins/YAMN/proto/netclient.h
new file mode 100644
index 0000000000..2414dbdef1
--- /dev/null
+++ b/plugins/YAMN/proto/netclient.h
@@ -0,0 +1,22 @@
+#ifndef __CLIENT_H
+#define __CLIENT_H
+
+class CNetClient
+{
+public:
+	CNetClient(): Stopped(FALSE) {}
+	virtual void Connect(const char* servername,const int port)=0;
+	virtual void Send(const char *query)=0;
+	virtual char* Recv(char *buf=NULL,int buflen=65536)=0;
+	virtual void Disconnect()=0;
+	virtual BOOL Connected()=0;
+	virtual void SSLify()=0;
+
+	BOOL Stopped;
+	int Rcv;
+	DWORD NetworkError;
+	DWORD SystemError;
+	BOOL ifTLSed;
+};
+
+#endif
diff --git a/plugins/YAMN/proto/netlib.cpp b/plugins/YAMN/proto/netlib.cpp
new file mode 100644
index 0000000000..f6f497b8da
--- /dev/null
+++ b/plugins/YAMN/proto/netlib.cpp
@@ -0,0 +1,278 @@
+/*
+ * This code implements communication based on Miranda netlib library
+ *
+ * (c) majvan 2002-2004
+ */
+
+#if !defined(_WIN64)
+	#include "../filter/simple/AggressiveOptimize.h"
+#endif
+#include <windows.h>
+#include <stdio.h>
+#include <newpluginapi.h>	//CallService,UnHookEvent
+#include <m_netlib.h>		//socket thorugh proxy functions
+#include <m_langpack.h>	//langpack for "connection" and other words
+#include "../debug.h"
+#include "netlib.h"
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+BOOL SSLLoaded=FALSE;
+HANDLE hNetlibUser=NULL;
+
+extern PVOID TLSCtx;
+extern PVOID SSLCtx;
+
+void __stdcall	SSL_DebugLog(const char *fmt, ...)
+{
+	char		str[ 4096 ];
+	va_list	vararg;
+
+	va_start( vararg, fmt );
+	int tBytes = _vsnprintf( str, sizeof(str)-1, fmt, vararg );
+	if ( tBytes == 0 )
+		return;
+
+	if ( tBytes > 0 )
+		str[ tBytes ] = 0;
+	else
+		str[ sizeof(str)-1 ] = 0;
+
+	CallService(MS_NETLIB_LOG, (WPARAM)hNetlibUser, (LPARAM)str);
+	va_end( vararg );
+}
+
+HANDLE RegisterNLClient(const char *name)
+{
+	static NETLIBUSER nlu={0};
+	char desc[128];
+
+	sprintf(desc, TranslateT("%s connection"),name);
+
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"<Register PROXY support>");
+#endif
+	nlu.cbSize = sizeof(nlu);
+	nlu.flags = NUF_OUTGOING  | NUF_HTTPCONNS;
+	nlu.szDescriptiveName=desc;
+	nlu.szSettingsModule=(char *)name;
+	hNetlibUser=(HANDLE)CallService(MS_NETLIB_REGISTERUSER,0,(LPARAM)&nlu);
+
+#ifdef DEBUG_COMM
+	if(NULL==hNetlibUser)
+		DebugLog(CommFile,"<error></Register PROXY support>\n");
+	else
+		DebugLog(CommFile,"</Register PROXY support>\n");
+#endif
+	return hNetlibUser;
+}
+
+//Move connection to SSL
+void CNLClient::SSLify() throw(DWORD){
+#ifdef DEBUG_COMM
+	SSL_DebugLog("Staring SSL...");
+#endif
+	int socket = CallService(MS_NETLIB_GETSOCKET, (WPARAM)hConnection, 0);
+	if (socket != INVALID_SOCKET)
+	{
+#ifdef DEBUG_COMM
+			SSL_DebugLog("Staring netlib core SSL");
+#endif
+		if (CallService(MS_NETLIB_STARTSSL, (WPARAM)hConnection, 0)) 
+		{
+#ifdef DEBUG_COMM
+			SSL_DebugLog("Netlib core SSL started");
+#endif
+			isTLSed = true;
+			SSLLoaded = TRUE;
+			return;
+		}
+	}
+
+	//ssl could not be created
+	throw NetworkError = (DWORD)ESSL_CREATESSL;
+}
+
+//Connects to the server through the sock
+//if not success, exception is throwed
+void CNLClient::Connect(const char* servername,const int port) throw(DWORD)
+{
+	NETLIBOPENCONNECTION nloc;
+
+	NetworkError=SystemError=0;
+	isTLSed = false;
+
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"<connect>\n");
+#endif
+	try
+	{
+		nloc.cbSize=sizeof(NETLIBOPENCONNECTION);
+		nloc.szHost=servername;
+		nloc.wPort=port;
+		nloc.flags=0;
+		if(NULL==(hConnection=(HANDLE)CallService(MS_NETLIB_OPENCONNECTION,(WPARAM)hNetlibUser,(LPARAM)&nloc)))
+		{
+			SystemError=WSAGetLastError();
+			throw NetworkError=(DWORD)ENL_CONNECT;
+		}
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"</connect>\n");
+#endif
+		return;
+	}
+	catch(...)
+	{
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"<error></connect>\n");
+#endif
+		throw;
+	}
+}
+
+//Performs a simple query
+// query- command to send
+int CNLClient::LocalNetlib_Send(HANDLE hConn,const char *buf,int len,int flags) {
+	if (isTLSed) 
+	{
+#ifdef DEBUG_COMM
+		SSL_DebugLog("SSL send: %s", buf);
+#endif
+	} 
+	
+	NETLIBBUFFER nlb={(char*)buf,len,flags};
+	return CallService(MS_NETLIB_SEND,(WPARAM)hConn,(LPARAM)&nlb);
+}
+
+void CNLClient::Send(const char *query) throw(DWORD)
+{
+	unsigned int Sent;
+
+	if(NULL==query)
+		return;
+	if(hConnection==NULL)
+		return;
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"<send>%s",query);
+#endif
+	try
+	{
+		if((SOCKET_ERROR==(Sent=LocalNetlib_Send(hConnection,query,(int)strlen(query),MSG_DUMPASTEXT))) || Sent!=(unsigned int)strlen(query))
+		{
+			SystemError=WSAGetLastError();
+			throw NetworkError=(DWORD)ENL_SEND;
+		}
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"</send>\n");
+#endif
+	}
+	catch(...)
+	{
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"<error></send>\n");
+#endif
+		throw;
+	}
+}
+
+//Reads data from socket
+// buf- buffer where to store max. buflen of received characters
+//      if buf is NULL, creates buffer of buflen size
+//      buf is NULL by default
+//You need free() returned buffer, which can be allocated in this function
+//if not success, exception is throwed
+
+int CNLClient::LocalNetlib_Recv(HANDLE hConn,char *buf,int len,int flags) {
+	NETLIBBUFFER nlb={buf,len,flags};
+	int iReturn = CallService(MS_NETLIB_RECV,(WPARAM)hConn,(LPARAM)&nlb);
+	if (isTLSed)
+	{
+#ifdef DEBUG_COMM
+		SSL_DebugLog("SSL recv: %s", buf);
+#endif
+	}
+	
+	return iReturn;
+}
+
+char* CNLClient::Recv(char *buf,int buflen) throw(DWORD)
+{
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"<reading>");
+#endif
+	try
+	{
+		if(buf==NULL)
+			buf=(char *)malloc(sizeof(char)*(buflen+1));
+		if(buf==NULL)
+			throw NetworkError=(DWORD)ENL_RECVALLOC;
+
+		if (!isTLSed)
+		{
+			NETLIBSELECT nls;
+			memset(&nls, 0, sizeof(NETLIBSELECT));
+			nls.cbSize = sizeof(NETLIBSELECT);
+			nls.dwTimeout = 60000;
+			nls.hReadConns[0] = hConnection;
+			switch (CallService(MS_NETLIB_SELECT, 0, (LPARAM) &nls)) 
+			{
+				case SOCKET_ERROR:
+				free(buf);
+				SystemError=WSAGetLastError();
+				throw NetworkError = (DWORD) ENL_RECV;
+				case 0: // time out!
+				free(buf);
+				throw NetworkError = (DWORD) ENL_TIMEOUT;
+			}
+ 		}
+
+		ZeroMemory(buf,buflen);
+		if(SOCKET_ERROR==(Rcv=LocalNetlib_Recv(hConnection,buf,buflen,MSG_DUMPASTEXT)))
+		{
+			free(buf);
+			SystemError=WSAGetLastError();
+			throw NetworkError=(DWORD)ENL_RECV;
+		}
+		if(!Rcv)
+		{
+			free(buf);
+			SystemError=WSAGetLastError();
+			throw NetworkError=(DWORD)ENL_RECV;
+		}
+#ifdef DEBUG_COMM
+		*(buf+Rcv)=0;				//end the buffer to write it to file
+		DebugLog(CommFile,"%s",buf);
+		DebugLog(CommFile,"</reading>\n");
+#endif
+		return(buf);
+	}
+	catch(...)
+	{
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"<error></reading>\n");
+#endif
+		throw;
+	}
+}
+
+//Closes netlib connection
+void CNLClient::Disconnect()
+{
+	Netlib_CloseHandle(hConnection);
+	hConnection=(HANDLE)NULL;
+}
+
+//Uninitializes netlib library
+void UnregisterNLClient()
+{
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"<Unregister PROXY support>");
+#endif
+	
+	Netlib_CloseHandle(hNetlibUser);
+	hNetlibUser=(HANDLE)NULL;
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"</Unregister PROXY support>\n");
+#endif
+}
diff --git a/plugins/YAMN/proto/netlib.h b/plugins/YAMN/proto/netlib.h
new file mode 100644
index 0000000000..90ad3613a5
--- /dev/null
+++ b/plugins/YAMN/proto/netlib.h
@@ -0,0 +1,55 @@
+#ifndef __NETLIB_H
+#define __NETLIB_H
+
+#include "netclient.h"
+
+#pragma warning( disable : 4290 )
+
+class CNLClient: public CNetClient
+{
+public:
+	CNLClient(): hConnection(NULL) {}
+	void Connect(const char* servername,const int port) throw(DWORD);
+	void Send(const char *query) throw(DWORD);
+	char* Recv(char *buf=NULL,int buflen=65536) throw(DWORD);
+	void Disconnect();
+	void SSLify()throw(DWORD);
+	
+	inline BOOL Connected() {return hConnection!=NULL;}
+
+protected:
+	HANDLE hConnection;
+	BOOL isTLSed;
+	int LocalNetlib_Send(HANDLE hConn,const char *buf,int len,int flags);
+	int LocalNetlib_Recv(HANDLE hConn,char *buf,int len,int flags);
+};
+
+void SSL_DebugLog(const char *fmt, ...);
+
+enum
+{
+	ENL_WINSOCKINIT=1,	//error initializing socket	//only wsock
+	ENL_GETHOSTBYNAME,	//DNS error			//only wsock
+	ENL_CREATESOCKET,	//error creating socket		//only wsock
+	ENL_CONNECT,		//cannot connect to server
+	ENL_SEND,			//cannot send data
+	ENL_RECV,			//cannot receive data
+	ENL_RECVALLOC,		//cannot allocate memory for received data
+	ENL_TIMEOUT,		//timed out during recv
+};
+
+enum
+{
+	ESSL_NOTLOADED=1,	//OpenSSL is not loaded
+	ESSL_WINSOCKINIT,	//WinSock 2.0 init failed
+	ESSL_GETHOSTBYNAME,	//DNS error
+	ESSL_CREATESOCKET,	//error creating socket
+	ESSL_SOCKETCONNECT,	//error connecting with socket
+	ESSL_CREATESSL,		//error creating SSL session structure
+	ESSL_SETSOCKET,		//error connect socket with SSL session for bidirect I/O space
+	ESSL_CONNECT,		//cannot connect to server
+	ESSL_SEND,		//cannot send data
+	ESSL_RECV,		//cannot receive data
+	ESSL_RECVALLOC,		//cannot allocate memory for received data
+};
+#endif
diff --git a/plugins/YAMN/proto/pop3/pop3.cpp b/plugins/YAMN/proto/pop3/pop3.cpp
new file mode 100644
index 0000000000..59b824445c
--- /dev/null
+++ b/plugins/YAMN/proto/pop3/pop3.cpp
@@ -0,0 +1,374 @@
+/*
+ * This code implements basics of POP3 protocol
+ *
+ * (c) majvan 2002-2004
+ */
+/* This was made from the libspopc project
+ * copyright c 2002 Benoit Rouits <brouits@free.fr>
+ * released under the terms of GNU LGPL
+ * (GNU Lesser General Public Licence).
+ * libspopc offers simple API for a pop3 client (MTA).
+ * See RFC 1725 for pop3 specifications.
+ * more information on http://brouits.free.fr/libspopc/
+ */
+/*
+ * This file is not original and is changed by majvan <om3tn@psg.sk>
+ * for mail checker purpose. Please see original web page to
+ * obtain the original. I rewrote it in C++, but good ideas were,
+ * I think, unchanged.
+ *
+ * Note that this file was not designed to work under Unix. It's
+ * needed to add Unix-specific features. I was interested only in
+ * Windows for my project. majvan
+ *
+ */
+
+#pragma warning( disable : 4290 )
+
+#if !defined(_WIN64)
+	#include "../../filter/simple/AggressiveOptimize.h"
+#endif
+#include <windows.h>
+#include <stdio.h>
+#include "pop3.h"
+
+extern "C" {
+#include "../md5.h"
+}
+
+extern void __stdcall	SSL_DebugLog( const char *fmt, ... );
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//Connects to the server through the netlib
+//if not success, exception is throwed
+//returns welcome string returned by server
+//sets AckFlag
+char *CPop3Client::Connect(const char* servername,const int port,BOOL UseSSL, BOOL NoTLS)
+{
+	char *temp = 0;
+	if(Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	if(NetClient!=NULL)
+		delete NetClient;
+	SSL=UseSSL;
+	NetClient=new CNLClient;
+
+#ifdef DEBUG_DECODE
+	DebugLog(DecodeFile,"Connect:servername: %s port:%d\n",servername,port);
+#endif
+	POP3Error=EPOP3_CONNECT;
+	NetClient->Connect(servername,port);
+	POP3Error=0;
+
+	if (SSL)
+	{
+		try { NetClient->SSLify(); } 
+		catch (...) 
+		{
+			NetClient->Disconnect();
+			return NULL;
+		}
+	}
+
+	temp = RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+	extern BOOL SSLLoaded;
+	if (!NoTLS & !(SSL)){
+		if(NetClient->Stopped)			//check if we can work with this POP3 client session
+			throw POP3Error=(DWORD)EPOP3_STOPPED;
+		NetClient->Send("STLS\r\n");
+		free(temp);
+		temp=RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+		if(AckFlag==POP3_FOK){ // Ok, we are going to tls
+			try {
+				NetClient->SSLify();
+			} catch (...) {
+				NetClient->Disconnect();
+				return NULL;
+			}
+//			temp = RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+		}
+	} 
+//	SSL_DebugLog("Received: %s",temp);
+	return temp;
+}
+
+//Receives data to the end of packet
+// prev- previous data read (appends to this string next received data)
+// mode- mode of packet. 
+//       Packet can end with ack state (+OK or -ERR): set mode to POP3_SEARCHACK
+//       If packet ends with '.' (end of string), set mode to POP3_SEARCHDOT
+// size- received data are stored to memory, but if length of data is more than allocated memory, function allocates
+//       new memory. New allocated memory has allocated size more bytes
+//       This value can be selectable: if you think it is better to reallocate by 1kB size, select size to 1024,
+//       default is 128. You do not need to use this parameter
+char* CPop3Client::RecvRest(char* prev,int mode,int size)
+{
+	int SizeRead=0;
+	int SizeLeft=size-NetClient->Rcv;
+	int RcvAll=NetClient->Rcv;
+	char *LastString,*PrevString=prev;
+
+	AckFlag=0;
+
+	while(((mode==POP3_SEARCHDOT) && !SearchFromEnd(PrevString+RcvAll-1,RcvAll-3,POP3_SEARCHDOT) && !SearchFromStart(PrevString,2,POP3_SEARCHERR)) ||		//we are looking for dot or -err phrase
+		((mode==POP3_SEARCHACK) && (!SearchFromStart(PrevString,RcvAll-3,mode) || !((RcvAll>3) && SearchFromEnd(PrevString+RcvAll-1,1,POP3_SEARCHNL)))))			//we are looking for +ok or -err phrase ended with newline
+	{		//if not found
+		if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		{
+			if(PrevString!=NULL)
+				free(PrevString);
+			throw POP3Error=(DWORD)EPOP3_STOPPED;
+		}
+		if(SizeLeft==0)						//if block is full
+		{
+			SizeRead+=size;
+			SizeLeft=size;
+			LastString=NetClient->Recv(NULL,SizeLeft);
+			PrevString=(char *)realloc(PrevString,sizeof(char)*(SizeRead+size));
+			if(PrevString==NULL)
+				throw POP3Error=(DWORD)EPOP3_RESTALLOC;
+			memcpy(PrevString+SizeRead,LastString,size);
+			free(LastString);
+		}
+		else
+			NetClient->Recv(PrevString+RcvAll,SizeLeft);			//to Rcv stores received bytes
+		SizeLeft=SizeLeft-NetClient->Rcv;
+		RcvAll+=NetClient->Rcv;
+//		printf("[Read: %s]\n",PrevString);
+	}
+	NetClient->Rcv=RcvAll;			//at the end, store the number of all bytes, no the number of last received bytes
+	return PrevString;
+}
+
+// CPop3Client::SearchFromEnd
+// returns 1 if substring DOTLINE or ENDLINE found from end in bs bytes
+// if you need to add condition for mode, insert it into switch statement
+BOOL CPop3Client::SearchFromEnd(char *end,int bs,int mode)
+{
+	while(bs>=0)
+	{
+		switch(mode)
+		{
+			case POP3_SEARCHDOT:
+				if(DOTLINE(end))
+					return 1;
+				break;
+			case POP3_SEARCHNL:
+				if(ENDLINE(end))
+					return 1;
+				break;
+		}
+		end--;
+		bs--;
+	}
+	return 0;
+}
+
+//Finds for a occurence of some pattern in string
+// returns 1 if substring OKLINE, ERRLINE or any of them found from start in bs bytes
+//call only this function to retrieve ack status (+OK or -ERR), because it sets flag AckFlag
+//if you need to add condition for mode, insert it into switch statement
+BOOL CPop3Client::SearchFromStart(char *start,int bs,int mode)
+{
+	while(bs>=0)
+	{
+		switch(mode)
+		{
+			case POP3_SEARCHOK:
+				if(OKLINE(start))
+				{
+					AckFlag=POP3_FOK;
+					return 1;
+				}
+				break;
+			case POP3_SEARCHERR:
+				if(ERRLINE(start))
+				{
+					AckFlag=POP3_FERR;
+					return 1;
+				}
+				break;
+			case POP3_SEARCHACK:
+				if(ACKLINE(start))
+				{
+					OKLINE(start) ? AckFlag=POP3_FOK : AckFlag=POP3_FERR;
+					return 1;
+				}
+				break;
+		}
+		start++;
+		bs--;
+	}
+	return 0;
+}
+
+//Performs "USER" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::User(char* name)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[128];
+	char *Result;
+
+	sprintf(query,"USER %s\r\n",name);
+	NetClient->Send(query);
+	Result=RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+	if(AckFlag==POP3_FERR)
+		throw POP3Error=(DWORD)EPOP3_BADUSER;
+	POP3Error=0;
+	return Result;
+}
+
+//Performs "PASS" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Pass(char* pw)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[128];
+	char *Result;
+
+	sprintf(query,"PASS %s\r\n",pw);
+	NetClient->Send(query);
+	Result=RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+	if(AckFlag==POP3_FERR)
+		throw POP3Error=(DWORD)EPOP3_BADPASS;
+	return Result;
+}
+
+//Performs "APOP" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::APOP(char* name, char* pw, char* timestamp)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[512];
+	char *Result;
+	unsigned char digest[16];
+	char hexdigest[40];
+
+	if(timestamp==NULL)
+		throw POP3Error=(DWORD)EPOP3_APOP;
+	MD5Context ctx;
+	MD5Init(&ctx);
+	MD5Update(&ctx,(const unsigned char *)timestamp,(unsigned int)strlen(timestamp));
+	MD5Update(&ctx,(const unsigned char *)pw,(unsigned int)strlen(pw));
+	MD5Final(digest,&ctx);
+	hexdigest[0]='\0';
+	for(int i=0; i<16; i++) {
+		char tmp[4];
+		sprintf(tmp, "%02x", digest[i]);
+		strcat(hexdigest, tmp);
+	}
+	sprintf(query,"APOP %s %s\r\n",name, hexdigest);
+	NetClient->Send(query);
+	Result=RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+	if(AckFlag==POP3_FERR)
+		throw POP3Error=(DWORD)EPOP3_BADUSER;
+	return Result;
+}
+
+//Performs "QUIT" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Quit()
+{
+	char query[]="QUIT\r\n";
+
+	NetClient->Send(query);
+	return RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+}
+
+//Performs "STAT" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Stat()
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[]="STAT\r\n";
+
+	NetClient->Send(query);
+	return RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+}
+
+//Performs "LIST" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::List()
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[]="LIST\r\n";
+
+	NetClient->Send(query);
+	return RecvRest(NetClient->Recv(),POP3_SEARCHDOT);
+}
+
+//Performs "TOP" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Top(int nr, int lines)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[128];
+
+	sprintf(query,"TOP %d %d\r\n",nr,lines);
+	NetClient->Send(query);
+	return RecvRest(NetClient->Recv(),POP3_SEARCHDOT);
+}
+
+//Performs "UIDL" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Uidl(int nr)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[128];
+
+	if(nr)
+	{
+		sprintf(query,"UIDL %d\r\n",nr);
+		NetClient->Send(query);
+		return RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+	}
+	sprintf(query,"UIDL\r\n");
+	NetClient->Send(query);
+	return RecvRest(NetClient->Recv(),POP3_SEARCHDOT);
+}
+
+//Performs "DELE" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Dele(int nr)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[128];
+
+	sprintf(query,"DELE %d\r\n",nr);
+	NetClient->Send(query);
+	return RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+}
+//Performs "RETR" pop query and returns server response
+//sets AckFlag
+char* CPop3Client::Retr(int nr)
+{
+	if(NetClient->Stopped)			//check if we can work with this POP3 client session
+		throw POP3Error=(DWORD)EPOP3_STOPPED;
+
+	char query[128];
+
+	sprintf(query,"RETR %d\r\n",nr);
+	NetClient->Send(query);
+	RecvRest(NetClient->Recv(),POP3_SEARCHACK);
+	return NetClient->Recv();
+}
\ No newline at end of file
diff --git a/plugins/YAMN/proto/pop3/pop3.h b/plugins/YAMN/proto/pop3/pop3.h
new file mode 100644
index 0000000000..faa6bd6195
--- /dev/null
+++ b/plugins/YAMN/proto/pop3/pop3.h
@@ -0,0 +1,66 @@
+#ifndef __POP3_H
+#define __POP3_H
+
+#include "../../debug.h"
+#include "../netlib.h"				//NetLib client
+
+#define DOTLINE(s)	((((s)[-2]=='\r') || ((s)[-2]=='\n')) && ((s)[-1]=='.') && (((s)[0]=='\r') || ((s)[0]=='\n') || ((s)[0]=='\0')))	// be careful, it's different to ESR's pop3.c ;-)
+#define ENDLINE(s)	(((s)[0]=='\r') || ((s)[0]=='\n'))	//endline
+#define OKLINE(s)	(((s)[0]=='+') && (((s)[1]=='o') || ((s)[1]=='O')) && (((s)[2]=='k') || ((s)[2]=='K')))	// +OK
+#define ERRLINE(s)	(((s)[0]=='-') && (((s)[1]=='e') || ((s)[1]=='E')) && (((s)[2]=='r') || ((s)[2]=='R')) && (((s)[3]=='r') || ((s)[3]=='R')))	// -ERR
+#define ACKLINE(s)	(OKLINE(s) || ERRLINE(s))
+
+#define	POP3_SEARCHDOT	1
+#define	POP3_SEARCHACK	2
+#define	POP3_SEARCHOK	3
+#define	POP3_SEARCHERR	4
+#define	POP3_SEARCHNL	5
+
+#define POP3_FOK	1
+#define POP3_FERR	2
+
+class CPop3Client
+{
+public:
+	CPop3Client(): NetClient(NULL), Stopped(FALSE) {}
+	~CPop3Client() {if(NetClient!=NULL) delete NetClient;}
+
+	char* Connect(const char* servername,const int port=110,BOOL UseSSL=FALSE, BOOL NoTLS=FALSE);
+	char* RecvRest(char* prev,int mode,int size=65536);
+	char* User(char* name);
+	char* Pass(char* pw);
+	char* APOP(char* name, char* pw, char* timestamp);
+	char* Quit();
+	char* Stat();
+	char* List();
+	char* Top(int nr, int lines=0);
+	char* Uidl(int nr=0);
+	char* Dele(int nr);
+	char* Retr(int nr);
+
+	unsigned char AckFlag;
+	BOOL SSL;
+	BOOL Stopped;
+
+	DWORD POP3Error;
+	class CNetClient *NetClient;	//here the network layout is defined (TCP or SSL+TCP etc.)
+private:
+	BOOL SearchFromEnd(char *end,int bs,int mode);
+	BOOL SearchFromStart(char *end,int bs,int mode);
+};
+
+enum
+{
+	EPOP3_QUEUEALLOC=1,	//memory allocation
+	EPOP3_STOPPED,		//stop account
+	EPOP3_CONNECT,		//cannot connect to server
+	EPOP3_RESTALLOC,	//cannot allocate memory for received data
+	EPOP3_BADUSER,		//cannot login because USER command failed
+	EPOP3_BADPASS,		//cannot login because PASS command failed
+	EPOP3_APOP,		//server does not send timestamp for APOP auth
+	EPOP3_STAT,
+	EPOP3_LIST,
+	EPOP3_UIDL,
+};
+
+#endif
diff --git a/plugins/YAMN/proto/pop3/pop3comm.cpp b/plugins/YAMN/proto/pop3/pop3comm.cpp
new file mode 100644
index 0000000000..44cbfcc83c
--- /dev/null
+++ b/plugins/YAMN/proto/pop3/pop3comm.cpp
@@ -0,0 +1,1636 @@
+/*
+ * This code implements POP3 server checking for new mail and so on.
+ * There's function SynchroPOP3 in this file- for checking and synchronising POP3 account
+ * and DeleteMailsPOP3- for deleting mails from POP3 server
+ *
+ * Note this file acts as main file for internal plugin.
+ *
+ * (c) majvan 2002-2004
+ * 18/08
+*/
+
+
+#pragma warning( disable : 4290 )
+#include "../../main.h"
+#include "../../yamn.h"
+#include "pop3.h"
+#include "pop3comm.h"		//all we need for POP3 account (POP3 account= YAMN account + some more POP3 specified members)
+#include <m_netlib.h>		//socket thorugh proxy functions
+
+#define ERRORSTR_MAXLEN	1024	//in wide-chars
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//From main.cpp
+void SetDefaultProtocolIcons();
+//From pop3opt.cpp
+extern int POP3OptInit(WPARAM wParam,LPARAM lParam);
+//From netlib.cpp
+extern HANDLE RegisterNLClient(const char *name);
+//this is imported because of one bug, should not be imported normally (this POP3 is plugin of YAMN)
+extern INT_PTR FilterMailSvc(WPARAM,LPARAM);
+
+extern char *ProtoName;
+extern INT_PTR YAMN_STATUS;
+extern PLUGININFO pluginInfo;
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+HANDLE hNetLib								= NULL;
+PSCOUNTER CPOP3Account::AccountWriterSO		= NULL;
+
+//Creates new CPOP3Account structure
+HACCOUNT WINAPI CreatePOP3Account(HYAMNPROTOPLUGIN Plugin,DWORD CAccountVersion);
+
+//Deletes CPOP3Account structure
+void WINAPI DeletePOP3Account(HACCOUNT Which);
+
+//Sets stop flag to account
+void WINAPI StopPOP3Account(HACCOUNT Which);
+
+//Function registers standard functions for YAMN
+int RegisterPOP3Plugin(WPARAM,LPARAM);
+
+//This should be normally exporeted fcn UninstallEx from plugin DLL, but YAMN has already exported one, so this is the same called from YAMN UninstallEx
+//This is used by PluginUninstall
+int UninstallPOP3(PLUGINUNINSTALLPARAMS* ppup);
+
+//Unloads all variables created on heap (delete[])
+DWORD WINAPI UnLoadPOP3(void *);
+
+//Function writes POP3 accounts using YAMN exported functions
+DWORD WINAPI WritePOP3Accounts();
+
+//Function stores plugin's data for account to file
+DWORD WINAPI WritePOP3Options(HANDLE,HACCOUNT);
+
+//Function reads plugin's data for account from file
+DWORD WINAPI ReadPOP3Options(HACCOUNT,TCHAR **,TCHAR *);
+
+//Creates new mail for an account
+HYAMNMAIL WINAPI CreatePOP3Mail(HACCOUNT Account,DWORD CMimeMailVersion);
+
+//Function does all needed work when connection failed or any error occured
+//Creates structure containing error code, closes internet session, runs "bad connect" function
+static void PostErrorProc(HPOP3ACCOUNT ActualAccount,void *ParamToBadConnect,DWORD POP3PluginParam,BOOL UseSSL);
+
+//Checks POP3 account and stores all info to account. It deletes old mails=> synchro
+// WhichTemp- pointer to strucure containing needed information
+DWORD WINAPI SynchroPOP3(struct CheckParam *WhichTemp);
+
+//Deletes mails from POP3 server
+// WhichTemp- structure containing needed information (queued messages to delete)
+//Function deletes from memory queue in WhichTemp structure
+DWORD WINAPI DeleteMailsPOP3(struct DeleteParam *WhichTemp);
+
+//Function makes readable message about error. It sends it back to YAMN, so YAMN then
+//can show it to the message window
+WCHAR* WINAPI GetErrorString(DWORD Code);
+
+//Function deletes string allocated in GetErrorString
+void WINAPI DeleteErrorString(LPVOID String);
+
+//Extracts info from result of POP3's STAT command
+// stream- source string
+// len- length of source string
+// mboxsize- adreess to integer, that receives size of mailbox
+// mails- adreess to integer, that receives number of mails
+void ExtractStat(char *stream,int len,int *mboxsize,int *mails);
+
+//Extracts mail ID on mailbox
+// stream- source string
+// len- length of source string
+// queue- address of first message, where first ID will be stored
+void ExtractUIDL(char *stream,int len,HYAMNMAIL queue);
+
+//Extracts mail size on mailbox
+// stream- source string
+// len- length of source string
+// queue- address of first message, where size of message #1 will be stored
+void ExtractList(char *stream,int len,HYAMNMAIL queue);
+
+void ExtractMail(char *stream,int len,HYAMNMAIL queue);
+
+struct YAMNExportedFcns *pYAMNFcn				= NULL;
+struct MailExportedFcns *pYAMNMailFcn			= NULL;
+
+YAMN_PROTOIMPORTFCN POP3ProtocolFunctions =
+{
+	CreatePOP3Account,
+	DeletePOP3Account,
+	StopPOP3Account,
+	WritePOP3Options,
+	ReadPOP3Options,
+	SynchroPOP3,
+	SynchroPOP3,
+	SynchroPOP3,
+	DeleteMailsPOP3,
+	GetErrorString,
+	NULL,
+	DeleteErrorString,
+	WritePOP3Accounts,
+	NULL,
+	UnLoadPOP3,
+};
+
+YAMN_MAILIMPORTFCN POP3MailFunctions =
+{
+	CreatePOP3Mail,
+	NULL,
+	NULL,
+	NULL,
+};
+
+PYAMN_VARIABLES pYAMNVar			= NULL;
+HYAMNPROTOPLUGIN POP3Plugin			= NULL;
+
+YAMN_PROTOREGISTRATION POP3ProtocolRegistration =
+{
+	"POP3 protocol (internal)",
+	YAMN_VERSION_C,
+	"� 2002-2004 majvan | 2005-2007 tweety, yb",
+	"Mail notifier and browser for Miranda IM. Included POP3 protocol.",
+	"francois.mean@skynet.be",
+	"http://forums.miranda-im.org/showthread.php?t=3035",
+};
+
+WCHAR *FileName						= NULL;
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+CPOP3Account::CPOP3Account()
+{
+//NOTE! This constructor constructs CAccount structure. If your plugin is not internal,
+//you will need these constructors. All you need is in Account.cpp. Just copy to your source code
+//constructor and destructor of CAccount.
+	UseInternetFree=CreateEvent(NULL,FALSE,TRUE,NULL);
+	InternetQueries=new SCOUNTER;
+	AbilityFlags=YAMN_ACC_BROWSE | YAMN_ACC_POPUP;
+
+	SetAccountStatus((HACCOUNT)this,TranslateT("Disconnected"));
+}
+
+CPOP3Account::~CPOP3Account()
+{
+	CloseHandle(UseInternetFree);
+	if(InternetQueries!=NULL)
+		delete InternetQueries;
+}
+
+HACCOUNT WINAPI CreatePOP3Account(HYAMNPROTOPLUGIN Plugin,DWORD CAccountVersion)
+{
+//First, we should check whether CAccountVersion matches.
+//But this is internal plugin, so YAMN's CAccount structure and our CAccount structure are
+//the same, so we do not need to test version. Otherwise, if CAccount version does not match
+//in your plugin, you should return NULL, like this:
+//	if(CAccountVersion!=YAMN_ACCOUNTVERSION) return NULL;
+
+//Now it is needed to construct our POP3 account and return its handle
+	return (HACCOUNT)new struct CPOP3Account();
+}
+
+void WINAPI DeletePOP3Account(HACCOUNT Which)
+{
+	delete (HPOP3ACCOUNT)Which;
+}
+
+void WINAPI StopPOP3Account(HACCOUNT Which)
+{
+	((HPOP3ACCOUNT)Which)->Client.Stopped=TRUE;
+	if(((HPOP3ACCOUNT)Which)->Client.NetClient!=NULL)			//we should inform also network client. Usefull only when network client implements this feature
+		((HPOP3ACCOUNT)Which)->Client.NetClient->Stopped=TRUE;
+}
+
+//This function is like main function for POP3 internal protocol
+int RegisterPOP3Plugin(WPARAM,LPARAM)
+{
+
+	//Get YAMN variables we can use
+	if(NULL==(pYAMNVar=(PYAMN_VARIABLES)CallService(MS_YAMN_GETVARIABLES,(WPARAM)YAMN_VARIABLESVERSION,(LPARAM)0)))
+		return 0;
+
+	//We have to get pointers to YAMN exported functions: allocate structure and fill it
+	if(NULL==(pYAMNFcn=new struct YAMNExportedFcns))
+		{UnLoadPOP3(0); return 0;}
+
+	//Register new pop3 user in netlib
+	if(NULL==(hNetLib=RegisterNLClient("YAMN-POP3")))
+		{UnLoadPOP3(0); return 0;}
+
+	pYAMNFcn->SetProtocolPluginFcnImportFcn=(YAMN_SETPROTOCOLPLUGINFCNIMPORTFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SETPROTOCOLPLUGINFCNIMPORTID,(LPARAM)0);
+	pYAMNFcn->WaitToWriteFcn=(YAMN_WAITTOWRITEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_WAITTOWRITEID,(LPARAM)0);
+	pYAMNFcn->WriteDoneFcn=(YAMN_WRITEDONEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_WRITEDONEID,(LPARAM)0);
+	pYAMNFcn->WaitToReadFcn=(YAMN_WAITTOREADFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_WAITTOREADID,(LPARAM)0);
+	pYAMNFcn->ReadDoneFcn=(YAMN_READDONEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_READDONEID,(LPARAM)0);
+	pYAMNFcn->SCGetNumberFcn=(YAMN_SCMANAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SCGETNUMBERID,(LPARAM)0);
+	pYAMNFcn->SCIncFcn=(YAMN_SCMANAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SCINCID,(LPARAM)0);
+	pYAMNFcn->SCDecFcn=(YAMN_SCMANAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SCDECID,(LPARAM)0);
+	pYAMNFcn->SetStatusFcn=(YAMN_SETSTATUSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SETSTATUSID,(LPARAM)0);
+	pYAMNFcn->GetStatusFcn=(YAMN_GETSTATUSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_GETSTATUSID,(LPARAM)0);
+
+	if(NULL==(pYAMNMailFcn=new struct MailExportedFcns))
+		{UnLoadPOP3(0); return 0;}
+
+	pYAMNMailFcn->SynchroMessagesFcn=(YAMN_SYNCHROMIMEMSGSFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_SYNCHROMIMEMSGSID,(LPARAM)0);
+	pYAMNMailFcn->TranslateHeaderFcn=(YAMN_TRANSLATEHEADERFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_TRANSLATEHEADERID,(LPARAM)0);
+	pYAMNMailFcn->AppendQueueFcn=(YAMN_APPENDQUEUEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_APPENDQUEUEID,(LPARAM)0);
+	pYAMNMailFcn->DeleteMessagesToEndFcn=(YAMN_DELETEMIMEQUEUEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_DELETEMIMEQUEUEID,(LPARAM)0);
+	pYAMNMailFcn->DeleteMessageFromQueueFcn=(YAMN_DELETEMIMEMESSAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_DELETEMIMEMESSAGEID,(LPARAM)0);
+	pYAMNMailFcn->FindMessageByIDFcn=(YAMN_FINDMIMEMESSAGEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_FINDMIMEMESSAGEID,(LPARAM)0);
+	pYAMNMailFcn->CreateNewDeleteQueueFcn=(YAMN_CREATENEWDELETEQUEUEFCN)CallService(MS_YAMN_GETFCNPTR,(WPARAM)YAMN_CREATENEWDELETEQUEUEID,(LPARAM)0);
+
+	//set static variable
+	if(CPOP3Account::AccountWriterSO==NULL) {
+		if(NULL==(CPOP3Account::AccountWriterSO=new SCOUNTER))
+			{UnLoadPOP3(0); return 0;}
+	}
+
+	//First, we register this plugin
+	//it is quite impossible this function returns zero (failure) as YAMN and internal plugin structre versions are the same
+	POP3ProtocolRegistration.Name = Translate("POP3 protocol (internal)");
+	POP3ProtocolRegistration.Description = Translate("Mail notifier and browser for Miranda IM. Included POP3 protocol.");
+	if(NULL==(POP3Plugin=(HYAMNPROTOPLUGIN)CallService(MS_YAMN_REGISTERPROTOPLUGIN,(WPARAM)&POP3ProtocolRegistration,(LPARAM)YAMN_PROTOREGISTRATIONVERSION)))
+		return 0;
+
+	//Next we set our imported functions for YAMN
+	if(!SetProtocolPluginFcnImport(POP3Plugin,&POP3ProtocolFunctions,YAMN_PROTOIMPORTFCNVERSION,&POP3MailFunctions,YAMN_MAILIMPORTFCNVERSION))
+		return 0;
+
+	//Then, we read all mails for accounts.
+	//You must first register account, before using this function as YAMN must use CreatePOP3Account function to add new accounts
+	//But if CreatePOP3Account is not implemented (equals to NULL), YAMN creates account as YAMN's standard HACCOUNT
+	if(FileName) CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0);	//shoud not happen (only for secure)
+	FileName=(WCHAR *)CallService(MS_YAMN_GETFILENAMEA,(WPARAM)"pop3",(LPARAM)0);
+
+	switch(CallService(MS_YAMN_READACCOUNTSW,(WPARAM)POP3Plugin,(LPARAM)FileName))
+	{
+		case EACC_FILEVERSION:
+			MessageBoxA(NULL,Translate("Found new version of account book, not compatible with this version of YAMN."),Translate(_T("YAMN (internal POP3) read error")),MB_OK);
+			CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0);
+			return 0;
+		case EACC_FILECOMPATIBILITY:
+			MessageBoxA(NULL,Translate("Error reading account file. Account file corrupted."),Translate("YAMN (internal POP3) read error"),MB_OK);
+			CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0);
+			return 0;
+		case EACC_ALLOC:
+			MessageBoxA(NULL,Translate("Memory allocation error while data reading"),Translate("YAMN (internal POP3) read error"),MB_OK);
+			CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0);
+			return 0;
+		case EACC_SYSTEM:
+			if(ERROR_FILE_NOT_FOUND!=GetLastError())
+			{
+				char temp[1024] = {0};
+				_snprintf(temp,1024,"%s\n%S",Translate("Reading file error. File already in use?"),FileName);
+				MessageBoxA(NULL,temp,Translate("YAMN (internal POP3) read error"),MB_OK);
+				CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0);
+				return 0;
+			}
+			break;
+	}
+	//HookEvent(ME_OPT_INITIALISE,POP3OptInit);
+
+	HACCOUNT Finder;
+	HANDLE hContact;
+	DBVARIANT dbv;
+	char *szProto;
+
+	for(Finder=POP3Plugin->FirstAccount;Finder!=NULL;Finder=Finder->Next)
+	{
+		Finder->hContact = NULL;
+		hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+		while(hContact) 
+		{
+			szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+			if(szProto != NULL && strcmp(szProto, ProtoName)==0)
+			{
+				if(!DBGetContactSetting(hContact,ProtoName,"Id",&dbv)) 
+				{
+					
+					if( strcmp((char*)dbv.pszVal, Finder->Name)==0)
+					{
+						Finder->hContact = hContact;
+						DBWriteContactSettingWord(Finder->hContact, ProtoName, "Status", ID_STATUS_ONLINE);
+						DBWriteContactSettingString(Finder->hContact, "CList", "StatusMsg", Translate("No new mail message"));
+						if((Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT))
+						{
+							DBDeleteContactSetting(Finder->hContact, "CList", "Hidden");
+						}
+						if(!(Finder->Flags & YAMN_ACC_ENA) || !(Finder->NewMailN.Flags & YAMN_ACC_CONT))
+						{
+							DBWriteContactSettingByte(Finder->hContact, "CList", "Hidden", 1);
+						}
+					}
+					DBFreeVariant(&dbv);
+				}
+
+			}
+			hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0);
+		}
+		if(Finder->hContact == NULL && (Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT))
+		{
+			//No account contact found, have to create one
+			Finder->hContact =(HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0);
+			CallService(MS_PROTO_ADDTOCONTACT,(WPARAM)Finder->hContact,(LPARAM)ProtoName);
+			DBWriteContactSettingString(Finder->hContact,ProtoName,"Id",Finder->Name);
+			DBWriteContactSettingString(Finder->hContact,ProtoName,"Nick",Finder->Name);
+			DBWriteContactSettingString(Finder->hContact,"Protocol","p",ProtoName);
+			DBWriteContactSettingWord(Finder->hContact, ProtoName, "Status", YAMN_STATUS);
+		}
+
+		/*//this doesn't work. the function doesn't know which contact to check
+		//if((Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT) && DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_SHOWMAINMENU, 1))
+		//{
+		//	mi.cbSize = sizeof(mi);
+		//	mi.position = 0xb0000000;
+		//	mi.flags = CMIM_ICON;
+		//	mi.hIcon = hYamnIcons[1];
+		//	mi.pszName = Finder->Name;
+		//	mi.pszPopupName = ProtoName;
+		//	mi.pszService = MS_YAMN_CLISTCONTEXT;
+		//	hMenuItemMain = (HANDLE) CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);
+		}*/
+
+	}
+
+	return 0;
+}
+
+int UninstallPOP3(PLUGINUNINSTALLPARAMS* ppup)		//Usually UninstallEx, but need different name, because it is registered yet in main.cpp
+{
+	if(ppup->bDoDeleteSettings)
+	{
+		char FileNameA[MAX_PATH+1];
+
+		PUIRemoveDbModule("YAMN-POP3");
+
+		if(FileName==NULL)
+			MessageBox(NULL,"Cannot delete book file when YAMN is not loaded. Please do it manually.","YAMN-POP3 uninstalling",MB_OK|MB_ICONWARNING);
+		else
+		{
+			if(!WideCharToMultiByte(CP_ACP,0,FileName,-1,FileNameA,MAX_PATH+1,NULL,NULL))
+				MessageBox(NULL,"Cannot delete book file. Please do it manually.","YAMN-POP3 uninstalling",MB_OK|MB_ICONWARNING);
+			else
+				DeleteFile(FileNameA);
+		}
+	}
+	return 0;
+}
+
+DWORD WINAPI UnLoadPOP3(void *)
+{
+	//pYAMNVar is only a pointr, no need delete or free
+	if(hNetLib) {
+		Netlib_CloseHandle(hNetLib); hNetLib = NULL;}
+	if(CPOP3Account::AccountWriterSO) {
+		delete CPOP3Account::AccountWriterSO; CPOP3Account::AccountWriterSO = NULL;}
+	if(pYAMNMailFcn) {
+		delete pYAMNMailFcn; pYAMNMailFcn = NULL;}
+	if(pYAMNFcn) {
+		delete pYAMNFcn; pYAMNFcn = NULL;}
+	if(FileName) {
+		CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0); FileName = NULL;}
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"UnLoadPOP3:done\n");
+	#endif
+	return 1;
+}
+
+DWORD WINAPI WritePOP3Accounts()
+{
+//	WCHAR *FileName=(WCHAR *)CallService(MS_YAMN_GETFILENAMEA,(WPARAM)"pop3",(LPARAM)0);
+	DWORD ReturnValue=CallService(MS_YAMN_WRITEACCOUNTSW,(WPARAM)POP3Plugin,(LPARAM)FileName);
+								
+	switch(ReturnValue)
+	{
+		case EACC_SYSTEM:
+			{
+				char temp[1024] = {0};
+				_snprintf(temp,1024,"%s\n%S",Translate("Error while copying data to disk occured. File in use?"),FileName);
+				MessageBox(NULL,temp,Translate("POP3 plugin- write file error"),MB_OK);
+			}
+			break;
+		case 0:
+			break;
+	}
+//	CallService(MS_YAMN_DELETEFILENAME,(WPARAM)FileName,(LPARAM)0);
+	return ReturnValue;
+}
+
+DWORD WINAPI WritePOP3Options(HANDLE File,HACCOUNT Which)
+{
+	DWORD WrittenBytes;
+	DWORD Ver=POP3_FILEVERSION;
+
+	if((!WriteFile(File,(char *)&Ver,sizeof(DWORD),&WrittenBytes,NULL)) ||
+		(!WriteFile(File,(char *)&((HPOP3ACCOUNT)Which)->CP,sizeof(WORD),&WrittenBytes,NULL)))
+		return EACC_SYSTEM;
+	return 0;
+}
+
+DWORD WINAPI ReadPOP3Options(HACCOUNT Which,TCHAR **Parser,TCHAR *End)
+{
+	DWORD Ver;
+#ifdef DEBUG_FILEREAD
+	TCHAR Debug[256];
+#endif
+	Ver=*(DWORD *)(*Parser);
+	(*Parser)+=sizeof(DWORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+	if(Ver!=POP3_FILEVERSION)
+		return EACC_FILECOMPATIBILITY;
+
+	((HPOP3ACCOUNT)Which)->CP=*(WORD *)(*Parser);
+	(*Parser)+=sizeof(WORD)/sizeof(TCHAR);
+	if(*Parser>=End)
+		return EACC_FILECOMPATIBILITY;
+#ifdef DEBUG_FILEREAD
+	_stprintf(Debug,_T("CodePage: %d, remaining %d chars"),((HPOP3ACCOUNT)Which)->CP,End-*Parser);
+	MessageBox(NULL,Debug,_T("debug"),MB_OK);
+#endif
+	return 0;
+}
+
+HYAMNMAIL WINAPI CreatePOP3Mail(HACCOUNT Account,DWORD MailDataVersion)
+{
+	HYAMNMAIL NewMail;
+//First, we should check whether MAILDATA matches.
+//But this is internal plugin, so YAMN's MAILDATA structure and our MAILDATA structure are
+//the same, so we do not need to test version. Otherwise, if MAILDATA version does not match
+//in your plugin, you should return NULL, like this:
+//	if(MailDataVersion!=YAMN_MAILDATAVERSION) return NULL;
+
+//Now it is needed to construct our POP3 account and return its handle
+	if(NULL==(NewMail=new YAMNMAIL))
+		return NULL;
+	
+	if(NULL==(NewMail->MailData=new MAILDATA))
+	{
+		delete NewMail;
+		return NULL;
+	}
+	NewMail->MailData->CP=((HPOP3ACCOUNT)Account)->CP;
+	return (HYAMNMAIL)NewMail;
+}
+
+static void SetContactStatus(HACCOUNT account, int status){
+	if ((account->hContact) && (account->NewMailN.Flags & YAMN_ACC_CONT)){
+		DBWriteContactSettingWord(account->hContact, ProtoName, "Status", status);
+	}
+}
+
+static void PostErrorProc(HPOP3ACCOUNT ActualAccount,void *ParamToBadConnection,DWORD POP3PluginParam,BOOL UseSSL)
+{
+	char *DataRX;
+
+//We create new structure, that we pass to bad connection dialog procedure. This procedure next calls YAMN imported fuction
+//from POP3 protocol to determine the description of error. We can describe error from our error code structure, because later,
+//when YAMN calls our function, it passes us our error code. This is pointer to structure for POP3 protocol in fact. 
+	PPOP3_ERRORCODE ErrorCode;
+
+//We store status before we do Quit(), because quit can destroy our errorcode status
+	if(NULL!=(ErrorCode=new POP3_ERRORCODE))
+	{
+		ErrorCode->SSL=UseSSL;
+		ErrorCode->AppError=ActualAccount->SystemError;
+		ErrorCode->POP3Error=ActualAccount->Client.POP3Error;
+		ErrorCode->NetError=ActualAccount->Client.NetClient->NetworkError;
+		ErrorCode->SystemError=ActualAccount->Client.NetClient->SystemError;
+	}
+
+	if(POP3PluginParam==(DWORD)NULL)		//if it was normal YAMN call (force check or so on)
+	{
+		try
+		{
+			DataRX=ActualAccount->Client.Quit();
+			if(DataRX!=NULL)
+				free(DataRX);
+		}
+		catch(...)
+		{
+		}
+//We always close connection if error occured
+		try
+		{
+			ActualAccount->Client.NetClient->Disconnect();
+		}
+		catch(...)
+		{
+		}
+
+		SetAccountStatus(ActualAccount,Translate("Disconnected"));
+
+//If we cannot allocate memory, do nothing
+		if(ErrorCode==NULL)
+		{
+			SetEvent(ActualAccount->UseInternetFree);
+			return;
+		}
+	}
+	else						//else it was called from POP3 plugin, probably error when deleting old mail (POP3 synchro calls POP3 delete)
+		if(ErrorCode==NULL)
+			return;
+
+	if((ActualAccount->BadConnectN.Flags & YAMN_ACC_MSG) || (ActualAccount->BadConnectN.Flags & YAMN_ACC_ICO) || (ActualAccount->BadConnectN.Flags & YAMN_ACC_POP))
+	{
+		YAMN_BADCONNECTIONPARAM cp={(HANDLE)0,ActualAccount,(UINT_PTR)ErrorCode,ParamToBadConnection};
+
+		CallService(MS_YAMN_BADCONNECTION,(WPARAM)&cp,(LPARAM)YAMN_BADCONNECTIONVERSION);
+	}
+	if(POP3PluginParam==(DWORD)NULL)		//if it was normal YAMN call
+		SetEvent(ActualAccount->UseInternetFree);
+}
+
+//Checks POP3 account and synchronizes it
+DWORD WINAPI SynchroPOP3(struct CheckParam * WhichTemp)
+{
+	HPOP3ACCOUNT ActualAccount;
+	CPop3Client *MyClient;
+	HYAMNMAIL NewMails=NULL,MsgQueuePtr=NULL;
+	char* DataRX=NULL,*Temp;
+	int mboxsize,msgs,i;
+	SYSTEMTIME now;
+	LPVOID YAMNParam;
+	DWORD CheckFlags;
+	BOOL UsingInternet=FALSE;
+	struct {
+		char *ServerName;
+		DWORD ServerPort;
+		char *ServerLogin;
+		char *ServerPasswd;
+		DWORD Flags;
+		DWORD NFlags;
+		DWORD NNFlags;
+	} ActualCopied;
+
+	//First, we should compare our version of CheckParam structure, but here it is not needed, because YAMN and internal plugin
+	//have the same version. But your plugin should do that in this way:
+	//	if(((struct CheckParam *)WhichTemp)->Ver!=YAMN_CHECKVERSION)
+	//	{
+	//		SetEvent(((struct CheckParam *)WhichTemp)->ThreadRunningEV);				//don't forget to unblock YAMN
+	//		return (DWORD)-1;									//ok, but we should return value.
+	//			//When our plugin returns e.g. 0xFFFFFFFF (=-1, this is only our plugin value, YAMN does nothing with return value,
+	//			//but only tests if it is nonzero. If yes, it calls GetErrorStringFcn. We know problem occured in YAMN incompatibility
+	//			//and then we can in our GetErrorStringFcn e.g. return string "Uncompatible version of YAMN".
+	//	}
+
+	ActualAccount=(HPOP3ACCOUNT)WhichTemp->AccountParam;			//copy address of structure from calling thread to stack of this thread
+	YAMNParam=WhichTemp->BrowserParam;
+	CheckFlags=WhichTemp->Flags;
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:Incrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+	#endif
+	SCInc(ActualAccount->UsingThreads);
+	//Unblock YAMN, signal that we have copied all parameters from YAMN thread stack
+	if(INVALID_HANDLE_VALUE!=WhichTemp->ThreadRunningEV)
+		SetEvent(WhichTemp->ThreadRunningEV);
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:ActualAccountSO-read wait\n");
+	#endif
+	if(WAIT_OBJECT_0!=WaitToRead(ActualAccount))
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:ActualAccountSO-read wait failed\n");
+		#endif
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+		#endif
+		SCDec(ActualAccount->UsingThreads);
+		return 0;
+	}
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:ActualAccountSO-read enter\n");
+	#endif
+	MyClient=&ActualAccount->Client;
+	//Now, copy all needed information about account to local variables, so ActualAccount is not blocked in read mode during all connection process, which can last for several minutes.
+	ActualCopied.ServerName=_strdup(ActualAccount->Server->Name);
+	ActualCopied.ServerPort=ActualAccount->Server->Port;
+	ActualCopied.Flags=ActualAccount->Flags;
+	ActualCopied.ServerLogin=_strdup(ActualAccount->Server->Login);
+	ActualCopied.ServerPasswd=_strdup(ActualAccount->Server->Passwd);
+	ActualCopied.NFlags=ActualAccount->NewMailN.Flags;
+	ActualCopied.NNFlags=ActualAccount->NoNewMailN.Flags;
+
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:ActualAccountSO-read done\n");
+	#endif
+	ReadDone(ActualAccount);
+
+	SCInc(ActualAccount->InternetQueries);				//increment counter, that there is one more thread waiting for connection
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:InternetFreeEV-wait\n");
+	#endif
+	WaitForSingleObject(ActualAccount->UseInternetFree,INFINITE);	//wait until we can use connection
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:InternetFreeEV-enter\n");
+	#endif
+	SCDec(ActualAccount->InternetQueries);
+
+	//OK, we enter the "use internet" section. But after we start communication, we can test if we did not enter the "use internet" section only for the reason,
+	//that previous thread release the internet section because this account has stop signal (we stop account and there are 2 threads: one communicating,
+	//the second one waiting for network access- the first one ends because we want to stop account, this one is released, but should be stopped as well).
+	if(!ActualAccount->AbleToWork)
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:stop signal-InternetFreeEV-done\n");
+		#endif
+		SetEvent(ActualAccount->UseInternetFree);
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:stop signal-Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+		#endif
+		SCDec(ActualAccount->UsingThreads);
+		return 0;
+	}
+	UsingInternet=TRUE;
+
+	GetLocalTime(&now);
+	ActualAccount->SystemError=0;					//now we can use internet for this socket. First, clear errorcode.
+	try
+	{
+		SetContactStatus(ActualAccount,ID_STATUS_OCCUPIED);
+		#ifdef DEBUG_COMM
+		DebugLog(CommFile,"<--------Communication-------->\n");
+		#endif
+		//	if we are already connected, we have open session (another thread left us open session), so we don't need to login
+		//	note that connected state without logging cannot occur, because if we close session, we always close socket too (we must close socket is the right word :) )
+		if((MyClient->NetClient==NULL) || !MyClient->NetClient->Connected())
+		{
+			SetAccountStatus(ActualAccount,Translate("Connecting to server"));
+
+			DataRX=MyClient->Connect(ActualCopied.ServerName,ActualCopied.ServerPort,ActualCopied.Flags & YAMN_ACC_SSL23,ActualCopied.Flags & YAMN_ACC_NOTLS);
+			char *timestamp=NULL;
+
+			if(DataRX!=NULL)
+			{
+				if(ActualCopied.Flags & YAMN_ACC_APOP)
+				{
+					char *lpos=strchr(DataRX,'<');
+					char *rpos=strchr(DataRX,'>');
+					if(lpos && rpos && rpos>lpos) {
+						int sz=(int)(rpos-lpos+2);
+						timestamp=new char[sz];
+						memcpy(timestamp, lpos, sz-1);
+						timestamp[sz-1]='\0';
+					}
+				}
+				free(DataRX);
+				DataRX=NULL;
+			}
+
+			SetAccountStatus(ActualAccount,Translate("Entering POP3 account"));
+
+			if(ActualCopied.Flags & YAMN_ACC_APOP)
+			{
+				DataRX=MyClient->APOP(ActualCopied.ServerLogin,ActualCopied.ServerPasswd,timestamp);
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+				delete[] timestamp;
+			} else {
+				DataRX=MyClient->User(ActualCopied.ServerLogin);
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+				DataRX=MyClient->Pass(ActualCopied.ServerPasswd);
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+			}
+		}
+		SetAccountStatus(ActualAccount,Translate("Searching for new mail message"));
+
+		DataRX=MyClient->Stat();
+
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<--------Account checking-------->\n");
+		DebugLog(DecodeFile,"<Extracting stat>\n");
+		#endif
+		ExtractStat(DataRX,MyClient->NetClient->Rcv,&mboxsize,&msgs);
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<MailBoxSize>%d</MailBoxSize>\n",mboxsize);
+		DebugLog(DecodeFile,"<Msgs>%d</Msgs>\n",msgs);
+		DebugLog(DecodeFile,"</Extracting stat>\n");
+		#endif
+		if(DataRX!=NULL)
+			free(DataRX);
+		DataRX=NULL;
+		for(i=0;i<msgs;i++)
+		{
+			if(!i)
+				MsgQueuePtr=NewMails=(HYAMNMAIL)CallService(MS_YAMN_CREATEACCOUNTMAIL,(WPARAM)ActualAccount,(LPARAM)YAMN_MAILVERSION);
+			else
+			{
+				MsgQueuePtr->Next=(HYAMNMAIL)CallService(MS_YAMN_CREATEACCOUNTMAIL,(WPARAM)ActualAccount,(LPARAM)YAMN_MAILVERSION);
+				MsgQueuePtr=MsgQueuePtr->Next;
+			}
+			if(MsgQueuePtr==NULL)
+			{
+				ActualAccount->SystemError=EPOP3_QUEUEALLOC;
+				throw (DWORD)ActualAccount->SystemError;
+			}
+		}
+
+		if(msgs)
+		{
+			DataRX=MyClient->List();
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting list>\n");
+			#endif
+			ExtractList(DataRX,MyClient->NetClient->Rcv,NewMails);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting list>\n");
+			#endif
+			if(DataRX!=NULL)
+				free(DataRX);
+			DataRX=NULL;
+
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting UIDL>\n");
+			#endif
+			DataRX=MyClient->Uidl();
+			ExtractUIDL(DataRX,MyClient->NetClient->Rcv,NewMails);
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</Extracting UIDL>\n");
+			#endif
+			if(DataRX!=NULL)
+				free(DataRX);
+			DataRX=NULL;
+		}
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write wait\n");
+		#endif
+		if(WAIT_OBJECT_0!=MsgsWaitToWrite(ActualAccount))
+		{
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write wait failed\n");
+			#endif
+			throw (DWORD)(ActualAccount->SystemError=EACC_STOPPED);
+		}
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write enter\n");
+		#endif
+		ActualAccount->LastChecked=now;
+		for(MsgQueuePtr=(HYAMNMAIL)ActualAccount->Mails;MsgQueuePtr!=NULL;MsgQueuePtr=MsgQueuePtr->Next){
+			if (MsgQueuePtr->Flags&YAMN_MSG_BODYREQUESTED){
+				HYAMNMAIL NewMsgsPtr=NULL;
+				for(NewMsgsPtr=(HYAMNMAIL)NewMails;NewMsgsPtr!=NULL;NewMsgsPtr=NewMsgsPtr->Next){
+					if (!strcmp(MsgQueuePtr->ID,NewMsgsPtr->ID)){
+						char accstatus[512];
+						sprintf(accstatus,Translate("Reading body %s"),NewMsgsPtr->ID);
+						SetAccountStatus(ActualAccount,accstatus);
+						DataRX=MyClient->Top(MsgQueuePtr->Number,100);
+						#ifdef DEBUG_DECODE
+						DebugLog(DecodeFile,"<Reading body>\n");
+						DebugLog(DecodeFile,"<Header>%s</Header>\n",DataRX);
+						#endif
+						if(DataRX!=NULL)
+						{
+							Temp=DataRX;
+							while((Temp<DataRX+MyClient->NetClient->Rcv) && (WS(Temp) || ENDLINE(Temp))) Temp++;
+						
+							if(OKLINE(DataRX))
+								for(Temp=DataRX;(Temp<DataRX+MyClient->NetClient->Rcv) && (!ENDLINE(Temp));Temp++);
+							while((Temp<DataRX+MyClient->NetClient->Rcv) && ENDLINE(Temp)) Temp++;
+						}
+						else
+							continue;
+						//delete all the headers of the old mail MsgQueuePtr->MailData->TranslatedHeader
+						struct CMimeItem *TH = MsgQueuePtr->MailData->TranslatedHeader;
+						if (TH) for(;MsgQueuePtr->MailData->TranslatedHeader!=NULL;)
+						{
+							TH=TH->Next;
+							if(MsgQueuePtr->MailData->TranslatedHeader->name!=NULL)
+								delete[] MsgQueuePtr->MailData->TranslatedHeader->name;
+							if(MsgQueuePtr->MailData->TranslatedHeader->value!=NULL)
+								delete[] MsgQueuePtr->MailData->TranslatedHeader->value;
+							delete MsgQueuePtr->MailData->TranslatedHeader;
+							MsgQueuePtr->MailData->TranslatedHeader=TH;
+						}
+
+						TranslateHeader(Temp,MyClient->NetClient->Rcv-(Temp-DataRX),&MsgQueuePtr->MailData->TranslatedHeader);
+						
+
+						#ifdef DEBUG_DECODE
+						DebugLog(DecodeFile,"</Reading body>\n");
+						#endif
+						MsgQueuePtr->Flags|=YAMN_MSG_BODYRECEIVED;
+
+						if(DataRX!=NULL)
+							free(DataRX);
+						DataRX=NULL;
+						break;
+					}
+				}
+			}
+		}
+
+		SynchroMessages(ActualAccount,(HYAMNMAIL *)&ActualAccount->Mails,NULL,(HYAMNMAIL *)&NewMails,NULL);		//we get only new mails on server!
+//		NewMails=NULL;
+
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write done\n");
+		#endif
+		MsgsWriteDone(ActualAccount);
+		for(MsgQueuePtr=(HYAMNMAIL)ActualAccount->Mails;MsgQueuePtr!=NULL;MsgQueuePtr=MsgQueuePtr->Next){
+			if ((MsgQueuePtr->Flags&YAMN_MSG_BODYREQUESTED) && (MsgQueuePtr->Flags&YAMN_MSG_BODYRECEIVED)){
+				MsgQueuePtr->Flags&=~YAMN_MSG_BODYREQUESTED;
+				if (MsgQueuePtr->MsgWindow){
+					SendMessage(MsgQueuePtr->MsgWindow,WM_YAMN_CHANGECONTENT,0,0);
+				}
+			}
+		}
+
+		for(msgs=0,MsgQueuePtr=NewMails;MsgQueuePtr!=NULL;MsgQueuePtr=MsgQueuePtr->Next,msgs++);			//get number of new mails
+
+		try
+		{
+			char accstatus[512];
+
+			for(i=0,MsgQueuePtr=NewMails;MsgQueuePtr!=NULL;i++)
+			{
+				BOOL autoretr = (ActualAccount->Flags & YAMN_ACC_BODY)!=0;
+				DataRX=MyClient->Top(MsgQueuePtr->Number,autoretr?100:0);
+				sprintf(accstatus,Translate("Reading new mail messages (%d%% done)"),100*i/msgs);
+				SetAccountStatus(ActualAccount,accstatus);
+
+				#ifdef DEBUG_DECODE
+				DebugLog(DecodeFile,"<New mail>\n");
+				DebugLog(DecodeFile,"<Header>%s</Header>\n",DataRX);
+				#endif
+				if(DataRX!=NULL)
+				{
+					Temp=DataRX;
+					while((Temp<DataRX+MyClient->NetClient->Rcv) && (WS(Temp) || ENDLINE(Temp))) Temp++;
+				
+					if(OKLINE(DataRX))
+						for(Temp=DataRX;(Temp<DataRX+MyClient->NetClient->Rcv) && (!ENDLINE(Temp));Temp++);
+					while((Temp<DataRX+MyClient->NetClient->Rcv) && ENDLINE(Temp)) Temp++;
+				}
+				else
+					continue;
+					
+				TranslateHeader(Temp,MyClient->NetClient->Rcv-(Temp-DataRX),&MsgQueuePtr->MailData->TranslatedHeader);
+				
+
+				#ifdef DEBUG_DECODE
+				DebugLog(DecodeFile,"</New mail>\n");
+				#endif
+				MsgQueuePtr->Flags|=YAMN_MSG_NORMALNEW;
+				if (autoretr) MsgQueuePtr->Flags|=YAMN_MSG_BODYRECEIVED;
+
+				//We are going to filter mail. Warning!- we must not be in read access neither write access to mails when calling this service
+				//This is done, because the "NewMails" queue is not synchronised. It is because it is new queue. Only this thread uses new queue yet, it is not
+				//connected to account mail queue.
+				//				CallService(MS_YAMN_FILTERMAIL,(WPARAM)ActualAccount,(LPARAM)MsgQueuePtr);
+				FilterMailSvc((WPARAM)ActualAccount,(LPARAM)MsgQueuePtr);
+
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+
+				//MsgQueuePtr->MailData->Body=MyClient->Retr(MsgQueuePtr->Number);
+
+				MsgQueuePtr=MsgQueuePtr->Next;
+
+			}
+			#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"</--------Account checking-------->\n");
+			#endif
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write wait\n");
+			#endif
+			if(WAIT_OBJECT_0!=MsgsWaitToWrite(ActualAccount))
+			{
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write wait failed\n");
+				#endif
+				throw (DWORD)ActualAccount->SystemError==EACC_STOPPED;
+			}
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write enter\n");
+			#endif
+			if(ActualAccount->Mails==NULL)
+				ActualAccount->Mails=NewMails;
+			else
+			{
+				ActualAccount->LastMail=ActualAccount->LastChecked;
+				AppendQueue((HYAMNMAIL)ActualAccount->Mails,NewMails);
+			}
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write done\n");
+			#endif
+			MsgsWriteDone(ActualAccount);
+
+			//	we are going to delete mails having SPAM flag level3 and 4 (see m_mails.h) set
+			{
+				struct DeleteParam ParamToDeleteMails={YAMN_DELETEVERSION,INVALID_HANDLE_VALUE,ActualAccount,YAMNParam,(void *)POP3_DELETEFROMCHECK};
+
+				//	Delete mails from server. Here we should not be in write access for account's mails
+				DeleteMailsPOP3(&ParamToDeleteMails);
+			}
+
+			//	if there is no waiting thread for internet connection close it
+			//	else leave connection open
+			if(0==SCGetNumber(ActualAccount->InternetQueries))
+			{
+				DataRX=MyClient->Quit();
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+				MyClient->NetClient->Disconnect();
+
+				SetAccountStatus(ActualAccount,Translate("Disconnected"));
+			}
+
+			UsingInternet=FALSE;
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:InternetFreeEV-done\n");
+			#endif
+			SetEvent(ActualAccount->UseInternetFree);
+
+			ActualAccount->LastSChecked=ActualAccount->LastChecked;
+			ActualAccount->LastSynchronised=ActualAccount->LastChecked;
+		}
+		catch(...)
+		{
+			throw;			//go to the main exception handling
+		}
+
+		{
+			YAMN_MAILBROWSERPARAM Param={(HANDLE)0,ActualAccount,ActualCopied.NFlags,ActualCopied.NNFlags,YAMNParam};
+
+			if(CheckFlags & YAMN_FORCECHECK)
+				Param.nnflags|=YAMN_ACC_POP;				//if force check, show popup anyway and if mailbrowser was opened, do not close
+			Param.nnflags|= YAMN_ACC_MSGP; //do not close browser if already open
+			CallService(MS_YAMN_MAILBROWSER,(WPARAM)&Param,(LPARAM)YAMN_MAILBROWSERVERSION);
+		}
+		SetContactStatus(ActualAccount,ActualAccount->isCounting?ID_STATUS_ONLINE:ID_STATUS_OFFLINE);
+	}
+	#ifdef DEBUG_COMM
+	catch(DWORD ErrorCode)
+	#else
+	catch(DWORD)
+	#endif
+	{
+		if(ActualAccount->Client.POP3Error==EPOP3_STOPPED)
+	                ActualAccount->SystemError=EACC_STOPPED;
+		#ifdef DEBUG_COMM
+		DebugLog(CommFile,"ERROR: %x\n",ErrorCode);
+		#endif
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write wait\n");
+		#endif
+		if(WAIT_OBJECT_0==MsgsWaitToWrite(ActualAccount))
+		{
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write enter\n");
+			#endif
+			ActualAccount->LastChecked=now;
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write done\n");
+			#endif
+			MsgsWriteDone(ActualAccount);
+		}
+		#ifdef DEBUG_SYNCHRO
+		else
+			DebugLog(SynchroFile,"CheckPOP3:ActualAccountMsgsSO-write wait failed\n");
+		#endif
+
+		DeleteMIMEQueue(ActualAccount,NewMails);
+
+		if(DataRX!=NULL)
+			free(DataRX);
+		DataRX=NULL;
+		switch(ActualAccount->SystemError)
+		{
+			case EACC_QUEUEALLOC:
+			case EACC_STOPPED:
+				ActualAccount->Client.NetClient->Disconnect();
+				break;
+			default:
+				PostErrorProc(ActualAccount,YAMNParam,(DWORD)NULL,MyClient->SSL);	//it closes internet connection too
+		}
+
+		if(UsingInternet)	//if our thread still uses internet
+		{
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:InternetFreeEV-done\n");
+			#endif
+			SetEvent(ActualAccount->UseInternetFree);
+		}
+		SetContactStatus(ActualAccount,ID_STATUS_NA);
+	}
+	free(ActualCopied.ServerName);
+	free(ActualCopied.ServerLogin);
+	free(ActualCopied.ServerPasswd);
+	#ifdef DEBUG_COMM
+	DebugLog(CommFile,"</--------Communication-------->\n");
+	#endif
+//	WriteAccounts();
+	#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"CheckPOP3:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+	#endif
+	SCDec(ActualAccount->UsingThreads);
+	return 0;
+}
+
+DWORD WINAPI DeleteMailsPOP3(struct DeleteParam *WhichTemp)
+{
+	HPOP3ACCOUNT ActualAccount;
+	LPVOID YAMNParam;
+	UINT_PTR POP3PluginParam;
+	CPop3Client *MyClient;
+	HYAMNMAIL DeleteMails,NewMails=NULL,MsgQueuePtr;
+	char* DataRX=NULL;
+	int mboxsize,msgs,i;
+	BOOL UsingInternet=FALSE;
+	struct {
+		char *ServerName;
+		DWORD ServerPort;
+		char *ServerLogin;
+		char *ServerPasswd;
+		DWORD Flags;
+		DWORD NFlags;
+		DWORD NNFlags;
+	} ActualCopied;
+
+	//First, we should compare our version of DeleteParam structure, but here it is not needed, because YAMN and internal plugin
+	//have the same version. But your plugin should do that in this way:
+	//	if(((struct DeleteParam *)WhichTemp)->Ver!=YAMN_DELETEVERSION)
+	//	{
+	//		SetEvent(((struct DeleteParam *)WhichTemp)->ThreadRunningEV);				//don't forget to unblock YAMN
+	//		return (DWORD)-1;									//ok, but we should return value.
+	//			//When our plugin returns e.g. 0xFFFFFFFF (this is only our plugin value, YAMN does nothing with return value,
+	//			//but only tests if it is nonzero. If yes, it calls GetErrorStringFcn), we know problem occured in YAMN incompatibility
+	//			//and then we can in our GetErrorStringFcn e.g. return string "Uncompatible version of YAMN".
+	//	}
+
+	ActualAccount=(HPOP3ACCOUNT)((struct DeleteParam *)WhichTemp)->AccountParam;			//copy address of structure from calling thread to stack of this thread
+	YAMNParam=((struct DeleteParam *)WhichTemp)->BrowserParam;
+	POP3PluginParam=(UINT_PTR)((struct DeleteParam *)WhichTemp)->CustomParam;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteMailsPOP3:Incrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+#endif
+	SCInc(ActualAccount->UsingThreads);
+	if(INVALID_HANDLE_VALUE!=WhichTemp->ThreadRunningEV)
+		SetEvent(WhichTemp->ThreadRunningEV);
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountSO-read wait\n");
+#endif
+	if(WAIT_OBJECT_0!=WaitToRead(ActualAccount))
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountSO-read wait failed\n");
+#endif
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+#endif
+		SCDec(ActualAccount->UsingThreads);
+		return 0;
+	}
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountSO-read enter\n");
+#endif
+	if(NULL==(DeleteMails=(HYAMNMAIL)CreateNewDeleteQueue((HYAMNMAIL)ActualAccount->Mails)))	//if there's no mail for deleting, return
+	{
+		if(POP3_DELETEFROMCHECK!=POP3PluginParam)						//We do not wait for free internet when calling from SynchroPOP3. It is because UseInternetFree is blocked
+		{
+			YAMN_MAILBROWSERPARAM Param={(HANDLE)0,ActualAccount,YAMN_ACC_MSGP,YAMN_ACC_MSGP,YAMNParam};		//Just update the window
+
+			CallService(MS_YAMN_MAILBROWSER,(WPARAM)&Param,(LPARAM)YAMN_MAILBROWSERVERSION);
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountSO-read done\n");
+#endif
+		ReadDone(ActualAccount);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+#endif
+		SCDec(ActualAccount->UsingThreads);
+
+		return NO_MAIL_FOR_DELETE;
+	}
+	MyClient=&(ActualAccount->Client);
+
+//Now, copy all needed information about account to local variables, so ActualAccount is not blocked in read mode during all connection process, which can last for several minutes.
+	ActualCopied.ServerName=_strdup(ActualAccount->Server->Name);
+	ActualCopied.ServerPort=ActualAccount->Server->Port;
+	ActualCopied.Flags=ActualAccount->Flags;
+	ActualCopied.ServerLogin=_strdup(ActualAccount->Server->Login);
+	ActualCopied.ServerPasswd=_strdup(ActualAccount->Server->Passwd);
+	ActualCopied.NFlags=ActualAccount->NewMailN.Flags;
+	ActualCopied.NNFlags=ActualAccount->NoNewMailN.Flags;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountSO-read done\n");
+#endif
+	ReadDone(ActualAccount);
+
+	SCInc(ActualAccount->InternetQueries);	//This is POP3-internal SCOUNTER, we set another thread wait for this account to be connected to inet
+	if(POP3_DELETEFROMCHECK!=POP3PluginParam)	//We do not wait for free internet when calling from SynchroPOP3. It is because UseInternetFree is blocked
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:InternetFreeEV-wait\n");
+#endif
+		WaitForSingleObject(ActualAccount->UseInternetFree,INFINITE);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:InternetFreeEV-enter\n");
+#endif
+	}
+	SCDec(ActualAccount->InternetQueries);
+	UsingInternet=TRUE;
+
+	try
+	{
+		SetContactStatus(ActualAccount,ID_STATUS_OCCUPIED);
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"<--------Communication-------->\n");
+#endif
+		if((MyClient->NetClient==NULL) || !MyClient->NetClient->Connected())
+		{
+			SetAccountStatus(ActualAccount,Translate("Connecting to server"));
+			
+			DataRX=MyClient->Connect(ActualCopied.ServerName,ActualCopied.ServerPort,ActualCopied.Flags & YAMN_ACC_SSL23,ActualCopied.Flags & YAMN_ACC_NOTLS);
+
+			char *timestamp=NULL;
+			if(DataRX!=NULL) {
+				if(ActualAccount->Flags & YAMN_ACC_APOP) {
+					char *lpos=strchr(DataRX,'<');
+					char *rpos=strchr(DataRX,'>');
+					if(lpos && rpos && rpos>lpos) {
+						int sz=(int)(rpos-lpos+2);
+						timestamp=new char[sz];
+						memcpy(timestamp, lpos, sz-1);
+						timestamp[sz-1]='\0';
+					}
+				}
+				free(DataRX);
+				DataRX=NULL;
+			}
+			SetAccountStatus(ActualAccount,Translate("Entering POP3 account"));
+
+			if(ActualAccount->Flags & YAMN_ACC_APOP)
+			{
+				DataRX=MyClient->APOP(ActualCopied.ServerLogin,ActualCopied.ServerPasswd,timestamp);
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+				delete[] timestamp;
+			} else {
+				DataRX=MyClient->User(ActualCopied.ServerLogin);
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+				DataRX=MyClient->Pass(ActualCopied.ServerPasswd);
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+			}
+		}
+
+#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<--------Deleting requested mails-------->\n");
+#endif
+		if(POP3_DELETEFROMCHECK!=POP3PluginParam)	//We do not need to get mails on server as we have already it from check function
+		{
+			SetAccountStatus(ActualAccount,Translate("Deleting requested mails"));
+
+			DataRX=MyClient->Stat();
+
+#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<Extracting stat>\n");
+#endif
+			ExtractStat(DataRX,MyClient->NetClient->Rcv,&mboxsize,&msgs);
+#ifdef DEBUG_DECODE
+			DebugLog(DecodeFile,"<MailBoxSize>%d</MailBoxSize>\n",mboxsize);
+			DebugLog(DecodeFile,"<Msgs>%d</Msgs>\n",msgs);
+			DebugLog(DecodeFile,"</Extracting stat>\n");
+#endif
+			if(DataRX!=NULL)
+				free(DataRX);
+			DataRX=NULL;
+			for(i=0;i<msgs;i++)
+			{
+				if(!i)
+					MsgQueuePtr=NewMails=(HYAMNMAIL)CallService(MS_YAMN_CREATEACCOUNTMAIL,(WPARAM)ActualAccount,(LPARAM)YAMN_MAILVERSION);
+				else
+				{
+					MsgQueuePtr->Next=(HYAMNMAIL)CallService(MS_YAMN_CREATEACCOUNTMAIL,(WPARAM)ActualAccount,(LPARAM)YAMN_MAILVERSION);
+					MsgQueuePtr=MsgQueuePtr->Next;
+				}
+				if(MsgQueuePtr==NULL)
+				{
+					ActualAccount->SystemError=EPOP3_QUEUEALLOC;
+					throw (DWORD)ActualAccount->SystemError;
+				}
+			}
+	
+			if(msgs)
+			{
+#ifdef DEBUG_DECODE
+				DebugLog(DecodeFile,"<Extracting UIDL>\n");
+#endif
+				DataRX=MyClient->Uidl();
+				ExtractUIDL(DataRX,MyClient->NetClient->Rcv,NewMails);
+#ifdef DEBUG_DECODE
+				DebugLog(DecodeFile,"</Extracting UIDL>\n");
+#endif
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+//	we get "new mails" on server (NewMails will contain all mails on server not found in DeleteMails)
+//	but also in DeleteMails we get only those, which are still on server with their responsable numbers
+				SynchroMessages(ActualAccount,(HYAMNMAIL *)&DeleteMails,NULL,(HYAMNMAIL *)&NewMails,NULL);
+			}
+		}
+		else
+			SetAccountStatus(ActualAccount,Translate("Deleting spam"));
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountMsgsSO-write wait\n");
+#endif
+		if(WAIT_OBJECT_0!=MsgsWaitToWrite(ActualAccount))
+		{
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountMsgsSO-write wait failed\n");
+#endif
+			throw (DWORD)EACC_STOPPED;
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountMsgsSO-write enter\n");
+#endif
+		if(msgs || POP3_DELETEFROMCHECK==POP3PluginParam)
+		{
+			try
+			{
+				HYAMNMAIL Temp;
+
+				for(i=0,MsgQueuePtr=DeleteMails;MsgQueuePtr!=NULL;i++)
+				{
+					if(!(MsgQueuePtr->Flags & YAMN_MSG_VIRTUAL))	//of course we can only delete real mails, not virtual
+					{
+						DataRX=MyClient->Dele(MsgQueuePtr->Number);
+						Temp=MsgQueuePtr->Next;
+						if(POP3_FOK==MyClient->AckFlag)			//if server answers that mail was deleted
+						{
+							DeleteMIMEMessage((HYAMNMAIL *)&DeleteMails,MsgQueuePtr);
+							HYAMNMAIL DeletedMail=FindMIMEMessageByID((HYAMNMAIL)ActualAccount->Mails,MsgQueuePtr->ID);
+							if((MsgQueuePtr->Flags & YAMN_MSG_MEMDELETE))		//if mail should be deleted from memory (or disk)
+							{
+								DeleteMIMEMessage((HYAMNMAIL *)&ActualAccount->Mails,DeletedMail);	//remove from queue
+								CallService(MS_YAMN_DELETEACCOUNTMAIL,(WPARAM)POP3Plugin,(LPARAM)DeletedMail);
+							}
+							else			//else mark it only as "deleted mail"
+							{
+								DeletedMail->Flags |= (YAMN_MSG_VIRTUAL | YAMN_MSG_DELETED);
+								DeletedMail->Flags &= ~(YAMN_MSG_NEW | YAMN_MSG_USERDELETE | YAMN_MSG_AUTODELETE);	//clear "new mail"
+							}
+							delete   MsgQueuePtr->MailData;
+							delete[] MsgQueuePtr->ID;
+							delete   MsgQueuePtr;
+						}
+						MsgQueuePtr=Temp;
+
+						if(DataRX!=NULL)
+							free(DataRX);
+						DataRX=NULL;
+					}
+					else
+						MsgQueuePtr=MsgQueuePtr->Next;
+				}
+			}
+			catch(...)		//if any exception in the code where we have write-access to account occured, don't forget to leave write-access
+			{
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountMsgsSO-write done\n");
+#endif  	
+				MsgsWriteDone(ActualAccount);
+				throw;			//and go to the main exception handling
+			}
+
+			if(NewMails!=NULL)
+//	in ActualAccount->Mails we have all mails stored before calling this function
+//	in NewMails we have all mails not found in DeleteMails (in other words: we performed new ID checking and we
+//	stored all mails found on server, then we deleted the ones we wanted to delete in this function
+//	and NewMails queue now contains actual state of mails on server). But we will not use NewMails as actual state, because NewMails does not contain header data (subject, from...)
+//	We perform deleting from ActualAccount->Mails: we remove from original queue (ActualAccount->Mails) all deleted mails
+				SynchroMessages(ActualAccount,(HYAMNMAIL *)&ActualAccount->Mails,NULL,(HYAMNMAIL *)&NewMails,NULL);
+//	Now ActualAccount->Mails contains all mails when calling this function except the ones, we wanted to delete (these are in DeleteMails)
+//	And in NewMails we have new mails (if any)
+			else if(POP3_DELETEFROMCHECK!=POP3PluginParam)
+			{
+				DeleteMIMEQueue(ActualAccount,(HYAMNMAIL)ActualAccount->Mails);
+				ActualAccount->Mails=NULL;
+			}
+		}
+		else
+		{
+			DeleteMIMEQueue(ActualAccount,(HYAMNMAIL)ActualAccount->Mails);
+			ActualAccount->Mails=NULL;
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"DeleteMailsPOP3:ActualAccountMsgsSO-write done\n");
+#endif
+		MsgsWriteDone(ActualAccount);
+#ifdef DEBUG_DECODE     	
+		DebugLog(DecodeFile,"</--------Deleting requested mails-------->\n");
+#endif
+
+//	TODO: now, we have in NewMails new mails. If NewMails is not NULL, we found some new mails, so Checking for new mail should be performed
+//	now, we do not call CheckPOP3
+
+//	if there is no waiting thread for internet connection close it
+//	else leave connection open
+//	if this functin was called from SynchroPOP3, then do not try to disconnect 
+		if(POP3_DELETEFROMCHECK!=POP3PluginParam)
+		{
+			YAMN_MAILBROWSERPARAM Param={(HANDLE)0,ActualAccount,ActualCopied.NFlags,YAMN_ACC_MSGP,YAMNParam};
+
+			CallService(MS_YAMN_MAILBROWSER,(WPARAM)&Param,(LPARAM)YAMN_MAILBROWSERVERSION);
+
+			if(0==SCGetNumber(ActualAccount->InternetQueries))
+			{
+				DataRX=MyClient->Quit();
+				if(DataRX!=NULL)
+					free(DataRX);
+				DataRX=NULL;
+				MyClient->NetClient->Disconnect();
+
+				SetAccountStatus(ActualAccount,Translate("Disconnected"));
+			}
+
+			UsingInternet=FALSE;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"DeleteMailsPOP3:InternetFreeEV-done\n");
+#endif
+			SetEvent(ActualAccount->UseInternetFree);
+		}
+		SetContactStatus(ActualAccount,ActualAccount->isCounting?ID_STATUS_ONLINE:ID_STATUS_OFFLINE);
+	}
+#ifdef DEBUG_COMM
+	catch(DWORD ErrorCode)
+#else
+	catch(DWORD)
+#endif
+	{
+		if(ActualAccount->Client.POP3Error==EPOP3_STOPPED)
+	                ActualAccount->SystemError=EACC_STOPPED;
+#ifdef DEBUG_COMM
+		DebugLog(CommFile,"ERROR %x\n",ErrorCode);
+#endif
+		if(DataRX!=NULL)
+			free(DataRX);
+		switch(ActualAccount->SystemError)
+		{
+			case EACC_QUEUEALLOC:
+			case EACC_STOPPED:
+				ActualAccount->Client.NetClient->Disconnect();
+				break;
+			default:
+				PostErrorProc(ActualAccount,YAMNParam,POP3PluginParam,MyClient->SSL);	//it closes internet connection too
+		}
+
+		if(UsingInternet && (POP3_DELETEFROMCHECK!=POP3PluginParam))	//if our thread still uses internet and it is needed to release internet
+		{
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"CheckPOP3:InternetFreeEV-done\n");
+#endif
+			SetEvent(ActualAccount->UseInternetFree);
+		}
+	}
+
+	free(ActualCopied.ServerName);
+	free(ActualCopied.ServerLogin);
+	free(ActualCopied.ServerPasswd);
+
+	DeleteMIMEQueue(ActualAccount,NewMails);
+	DeleteMIMEQueue(ActualAccount,DeleteMails);
+
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"</--------Communication-------->\n");
+#endif
+//	WriteAccounts();
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"DeleteMailsPOP3:Decrementing \"using threads\" %x (account %x)\n",ActualAccount->UsingThreads,ActualAccount);
+#endif
+	SCDec(ActualAccount->UsingThreads);
+	return 0;
+}
+
+void ExtractStat(char *stream,int len,int *mboxsize,int *mails)
+{
+	char *finder=stream;
+	while(WS(finder) || ENDLINE(finder)) finder++;
+	if(ACKLINE(finder))
+	{
+		while(!WS(finder)) finder++;
+		while(WS(finder)) finder++;
+	}
+	if(1!=sscanf(finder,"%d",mails))
+		throw (DWORD)EPOP3_STAT;
+	while(!WS(finder)) finder++;
+	while(WS(finder)) finder++;
+	if(1!=sscanf(finder,"%d",mboxsize))
+		throw (DWORD)EPOP3_STAT;
+}
+void ExtractMail(char *stream,int len,HYAMNMAIL queue)
+{
+	char *finder=stream;
+	char *finderend;
+	int msgnr,i;
+	HYAMNMAIL queueptr=queue;
+
+	while(WS(finder) || ENDLINE(finder)) finder++;
+	while(!ACKLINE(finder)) finder++;
+	while(!ENDLINE(finder)) finder++;			//now we at the end of first ack line
+	while(finder<=(stream+len))
+	{
+		while(ENDLINE(finder)) finder++;		//go to the new line
+		if(DOTLINE(finder+1))					//at the end of stream
+			break;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Message>\n");
+		#endif
+		while(WS(finder)) finder++;			//jump whitespace
+		if(1!=sscanf(finder,"%d",&msgnr))
+			throw (DWORD)EPOP3_UIDL;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Nr>%d</Nr>\n",msgnr);
+		#endif
+//		for(i=1,queueptr=queue;(queueptr->Next!=NULL) && (i<msgnr);queueptr=queueptr->Next,i++);
+//		if(i!=msgnr)
+//			throw (DWORD)EPOP3_UIDL;
+		while(!WS(finder)) finder++;			//jump characters
+		while(WS(finder)) finder++;			//jump whitespace
+		finderend=finder+1;
+		while(!WS(finderend) && !ENDLINE(finderend)) finderend++;
+		queueptr->ID=new char[finderend-finder+1];
+		for(i=0;finder!=finderend;finder++,i++)
+			queueptr->MailData->Body[i]=*finder;
+		queueptr->MailData->Body[i]=0;				//ends string
+		queueptr->Number=msgnr;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<ID>%s</ID>\n",queueptr->MailData->Body);
+		DebugLog(DecodeFile,"</Message>\n");
+		#endif
+		queueptr=queueptr->Next;
+		while(!ENDLINE(finder)) finder++;
+	}
+}
+
+void ExtractUIDL(char *stream,int len,HYAMNMAIL queue)
+{
+	char *finder=stream;
+	char *finderend;
+	int msgnr,i;
+	HYAMNMAIL queueptr=queue;
+
+	while(WS(finder) || ENDLINE(finder)) finder++;
+	while(!ACKLINE(finder)) finder++;
+	while(!ENDLINE(finder)) finder++;			//now we at the end of first ack line
+	while(finder<=(stream+len))
+	{
+		while(ENDLINE(finder)) finder++;		//go to the new line
+		if(DOTLINE(finder+1))					//at the end of stream
+			break;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Message>\n");
+		#endif
+		while(WS(finder)) finder++;			//jump whitespace
+		if(1!=sscanf(finder,"%d",&msgnr))
+			throw (DWORD)EPOP3_UIDL;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Nr>%d</Nr>\n",msgnr);
+		#endif
+//		for(i=1,queueptr=queue;(queueptr->Next!=NULL) && (i<msgnr);queueptr=queueptr->Next,i++);
+//		if(i!=msgnr)
+//			throw (DWORD)EPOP3_UIDL;
+		while(!WS(finder)) finder++;			//jump characters
+		while(WS(finder)) finder++;			//jump whitespace
+		finderend=finder+1;
+		while(!WS(finderend) && !ENDLINE(finderend)) finderend++;
+		queueptr->ID=new char[finderend-finder+1];
+		for(i=0;finder!=finderend;finder++,i++)
+			queueptr->ID[i]=*finder;
+		queueptr->ID[i]=0;				//ends string
+		queueptr->Number=msgnr;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<ID>%s</ID>\n",queueptr->ID);
+		DebugLog(DecodeFile,"</Message>\n");
+		#endif
+		queueptr=queueptr->Next;
+		while(!ENDLINE(finder)) finder++;
+	}
+}
+
+void ExtractList(char *stream,int len,HYAMNMAIL queue)
+{
+	char *finder=stream;
+	char *finderend;
+	int msgnr,i;
+	HYAMNMAIL queueptr;
+
+	while(WS(finder) || ENDLINE(finder)) finder++;
+	while(!ACKLINE(finder)) finder++;
+	while(!ENDLINE(finder)) finder++;			//now we at the end of first ack line
+	while(finder<=(stream+len))
+	{
+		while(ENDLINE(finder)) finder++;		//go to the new line
+		if(DOTLINE(finder+1))				//at the end of stream
+			break;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Message>\n",NULL,0);
+		#endif
+		while(WS(finder)) finder++;			//jump whitespace
+		if(1!=sscanf(finder,"%d",&msgnr))		//message nr.
+			throw (DWORD)EPOP3_LIST;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Nr>%d</Nr>\n",msgnr);
+		#endif
+
+		for(i=1,queueptr=queue;(queueptr->Next!=NULL) && (i<msgnr);queueptr=queueptr->Next,i++);
+		if(i!=msgnr)
+			throw (DWORD)EPOP3_LIST;
+		while(!WS(finder)) finder++;			//jump characters
+		while(WS(finder)) finder++;			//jump whitespace
+		finderend=finder+1;
+		if(1!=sscanf(finder,"%d",&queueptr->MailData->Size))
+			throw (DWORD)EPOP3_LIST;
+		#ifdef DEBUG_DECODE
+		DebugLog(DecodeFile,"<Nr>%d</Nr>\n",queueptr->MailData->Size);
+		#endif
+		while(!ENDLINE(finder)) finder++;
+	}
+}
+
+WCHAR* WINAPI GetErrorString(DWORD Code)
+{
+	static char *POP3Errors[]=
+	{
+		"Memory allocation error.",		//memory allocation
+		"Account is about to be stopped.",	//stop account
+		"Cannot connect to POP3 server.",
+		"Cannot allocate memory for received data.",
+		"Cannot login to POP3 server.",
+		"Bad user or password.",
+		"Server does not support APOP authorization.",
+		"Error while executing POP3 command.",
+		"Error while executing POP3 command.",
+		"Error while executing POP3 command.",
+	};
+
+	static char *NetlibErrors[]=
+	{
+		"Cannot connect to server with NetLib.",
+		"Cannot send data.",
+		"Cannot receive data.",
+		"Cannot allocate memory for received data.",
+	};
+
+	static char *SSLErrors[]=
+	{
+		"OpenSSL not loaded.",
+		"Windows socket 2.0 init failed.",
+		"DNS lookup error.",
+		"Error while creating base socket.",
+		"Error connecting to server with socket.",
+		"Error while creating SSL structure.",
+		"Error connecting socket with SSL.",
+		"Server rejected connection with SSL.",
+		"Cannot write SSL data.",
+		"Cannot read SSL data.",
+		"Cannot allocate memory for received data.",
+	};
+
+	char *ErrorStringA=new char[ERRORSTR_MAXLEN];
+	WCHAR *ErrorStringW=new WCHAR[ERRORSTR_MAXLEN];
+	POP3_ERRORCODE *ErrorCode=(POP3_ERRORCODE *)(UINT_PTR)Code;
+
+	sprintf(ErrorStringA,Translate("Error %d-%d-%d-%d:"),ErrorCode->AppError,ErrorCode->POP3Error,ErrorCode->NetError,ErrorCode->SystemError);
+	if(ErrorCode->POP3Error)
+		sprintf(ErrorStringA,"%s\n%s",ErrorStringA,Translate(POP3Errors[ErrorCode->POP3Error-1]));
+	if(ErrorCode->NetError)
+		if(ErrorCode->SSL)
+			sprintf(ErrorStringA,"%s\n%s",ErrorStringA,Translate(SSLErrors[ErrorCode->NetError-1]));
+		else
+			sprintf(ErrorStringA,"%s\n%s",ErrorStringA,Translate(NetlibErrors[ErrorCode->NetError-4]));
+		
+#ifdef DEBUG_COMM
+	DebugLog(CommFile,"%s\n",ErrorStringA);
+#endif
+	MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,ErrorStringA,-1,ErrorStringW,(int)strlen(ErrorStringA)+1);
+	delete[] ErrorStringA;		//we delete ErrorStringA, used to get error string, because Translate() doesn't works in unicode
+	delete ErrorCode;			//now we can delete ErrorCode, that will not be used anymore
+	return ErrorStringW;
+}
+
+void WINAPI DeleteErrorString(LPVOID String)
+{
+	delete (char *)String;
+}
diff --git a/plugins/YAMN/proto/pop3/pop3comm.h b/plugins/YAMN/proto/pop3/pop3comm.h
new file mode 100644
index 0000000000..7b93bdaf52
--- /dev/null
+++ b/plugins/YAMN/proto/pop3/pop3comm.h
@@ -0,0 +1,97 @@
+#ifndef __POP3COMM_H
+#define __POP3COMM_H
+
+#include <windows.h>
+#include "pop3.h"
+
+#include "m_protoplugin.h"
+//We can use synchro.h because this is internal plugin. If you use external plugin,
+//and you want to use SO for your plugin, you can use YAMN's SO.
+//All you need is to include synchro.h and use YAMN's exported synchronization functions.
+#include "m_synchro.h"
+
+//For mail exported functions defintions
+#include "../../mails/m_mails.h"
+
+#include "../../debug.h"
+					
+#define	POP3_FILEVERSION	1	//Version of aditional information stored in book file
+
+typedef struct CPOP3Account: public CAccount
+{
+// We can use SCOUNTER structure, because this is internal plugin.
+// This SO is used to determine if any POP3 account is in "write access" mode
+	static PSCOUNTER AccountWriterSO;
+
+// It is usefull to have client structure in account. With this structure we have access to account's socket.
+// This is related to InternetQueries and UseInternetFree
+// This member should be synchronized with UseInternetFree
+	class CPop3Client Client;
+
+// This member is usefull for MIME headers. It is default codepage, if no other codepage found
+	WORD CP;				//access only through AccountAccessSO
+
+// In this memeber last error code is stored
+	DWORD SystemError;			//access through UseInternetFree
+
+// We use only counter from this object and it is # of threads waiting to work on internet.
+// We use event UseInternet to access critical sections.
+// It is usefull in 2 ways: we have mutual exclusion that only one thread works with account on internet.
+// Thread, which has done its work with account on internet can close socket, but it is not needed, when any other
+// thread wants to work (e.g. we have deleted mails, but when deleting, another thread wants to check new mail, so
+// we delete all needed mails and check if there's thread that wants to work. If yes, we do not need to quit session,
+// we leave socket open, and leave internet. Another thread then start checking and does not connect, does not send
+// user and password... because socket is open- it continues)
+	PSCOUNTER InternetQueries;
+	HANDLE UseInternetFree;
+
+	CPOP3Account();
+	~CPOP3Account();
+
+} POP3ACCOUNT,*HPOP3ACCOUNT;
+
+typedef struct POP3LayeredError
+{
+	BOOL SSL;
+	DWORD AppError;
+	DWORD POP3Error;
+	DWORD NetError;
+	DWORD SystemError;
+} POP3_ERRORCODE,*PPOP3_ERRORCODE;
+
+struct YAMNExportedFcns
+{
+	YAMN_SETPROTOCOLPLUGINFCNIMPORTFCN	SetProtocolPluginFcnImportFcn;
+	YAMN_WAITTOWRITEFCN	WaitToWriteFcn;
+	YAMN_WRITEDONEFCN	WriteDoneFcn;
+	YAMN_WAITTOREADFCN	WaitToReadFcn;
+	YAMN_READDONEFCN	ReadDoneFcn;
+	YAMN_SCMANAGEFCN	SCGetNumberFcn;
+	YAMN_SCMANAGEFCN	SCIncFcn;
+	YAMN_SCMANAGEFCN	SCDecFcn;
+	YAMN_SETSTATUSFCN	SetStatusFcn;
+	YAMN_GETSTATUSFCN	GetStatusFcn;
+};
+
+struct MailExportedFcns
+{
+	YAMN_SYNCHROMIMEMSGSFCN	SynchroMessagesFcn;
+	YAMN_TRANSLATEHEADERFCN	TranslateHeaderFcn;
+	YAMN_APPENDQUEUEFCN	AppendQueueFcn;
+	YAMN_DELETEMIMEQUEUEFCN	DeleteMessagesToEndFcn;
+	YAMN_DELETEMIMEMESSAGEFCN	DeleteMessageFromQueueFcn;
+	YAMN_FINDMIMEMESSAGEFCN	FindMessageByIDFcn;
+	YAMN_CREATENEWDELETEQUEUEFCN	CreateNewDeleteQueueFcn;
+};
+
+enum
+{
+	EACC_QUEUEALLOC=1,	//memory allocation
+	EACC_STOPPED,		//stop account
+};
+
+#define	NO_MAIL_FOR_DELETE	1
+
+#define	POP3_DELETEFROMCHECK	1
+
+#endif
diff --git a/plugins/YAMN/proto/pop3/pop3opt.cpp b/plugins/YAMN/proto/pop3/pop3opt.cpp
new file mode 100644
index 0000000000..ec748ac6b0
--- /dev/null
+++ b/plugins/YAMN/proto/pop3/pop3opt.cpp
@@ -0,0 +1,1686 @@
+/*
+ * This code implements POP3 options window handling
+ *
+ * (c) majvan 2002-2003
+*/
+
+/*
+#include <tchar.h>
+#include <stdio.h>
+#include <windows.h>
+#include <winuser.h>
+#include <commctrl.h>
+#include "../../../../../SDK/headers_c/newpluginapi.h"
+//#include "../../../../random/utils/m_utils.h"		//for window broadcasting
+#include "../../../../../SDK/headers_c/m_langpack.h"
+#include "../../../../../SDK/headers_c/m_options.h"
+#include "../../../../../SDK/headers_c/m_utils.h"
+#include "../../SDK/import/m_popup.h"
+#include "../../m_protoplugin.h"
+#include "../../m_synchro.h"
+#include "../../m_messages.h"
+#include "../../resources/resource.h"
+#include "../../m_yamn.h"
+#include "../../debug.h"
+*/
+#include "../../yamn.h"
+#include "../../main.h"
+#include "pop3comm.h"
+#include "pop3opt.h"
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+extern PLUGINLINK *pluginLink;
+extern PYAMN_VARIABLES pYAMNVar;
+extern HYAMNPROTOPLUGIN POP3Plugin;
+extern struct YAMNExportedFcns *pYAMNFcn;
+extern YAMN_VARIABLES YAMNVar;
+
+extern HICON hYamnIcons[];
+
+extern DWORD WINAPI WritePOP3Accounts();
+extern DWORD HotKeyThreadID;
+extern LPCRITICAL_SECTION PluginRegCS;
+//From filterplugin.cpp
+extern PYAMN_FILTERPLUGINQUEUE FirstFilterPlugin;
+//From protoplugin.cpp
+extern PYAMN_PROTOPLUGINQUEUE FirstProtoPlugin;
+//for XP themes
+extern BOOL (WINAPI *MyEnableThemeDialogTexture)(HANDLE, DWORD);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+
+BOOL Check0,Check1,Check2,Check3,Check4,Check5,Check6,Check7,Check8,Check9;
+TCHAR DlgInput[MAX_PATH];
+
+//Fuction took from Miranda
+void WordToModAndVk(WORD w,UINT *mod,UINT *vk);
+
+//Initializes YAMN general options for Miranda
+int YAMNOptInitSvc(WPARAM wParam,LPARAM lParam);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+void WordToModAndVk(WORD w,UINT *mod,UINT *vk)
+{
+	*mod=0;
+	if(HIBYTE(w)&HOTKEYF_CONTROL) *mod|=MOD_CONTROL;
+	if(HIBYTE(w)&HOTKEYF_SHIFT) *mod|=MOD_SHIFT;
+	if(HIBYTE(w)&HOTKEYF_ALT) *mod|=MOD_ALT;
+	if(HIBYTE(w)&HOTKEYF_EXT) *mod|=MOD_WIN;
+	*vk=LOBYTE(w);
+}
+
+
+INT_PTR CALLBACK DlgProcYAMNOpt(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+			TranslateDialogDefault(hDlg);
+			CheckDlgButton(hDlg,IDC_CHECKTTB,DBGetContactSettingByte(NULL,YAMN_DBMODULE,YAMN_TTBFCHECK,1) ? BST_CHECKED : BST_UNCHECKED);
+			SendDlgItemMessage(hDlg,IDC_HKFORCE,HKM_SETHOTKEY,DBGetContactSettingWord(NULL,YAMN_DBMODULE,YAMN_HKCHECKMAIL,YAMN_DEFAULTHK),0);
+			CheckDlgButton(hDlg,IDC_LONGDATE,(optDateTime&SHOWDATELONG) ? BST_CHECKED : BST_UNCHECKED);
+			CheckDlgButton(hDlg,IDC_SMARTDATE,(optDateTime&SHOWDATENOTODAY) ? BST_CHECKED : BST_UNCHECKED);
+			CheckDlgButton(hDlg,IDC_NOSECONDS,(optDateTime&SHOWDATENOSECONDS) ? BST_CHECKED : BST_UNCHECKED);
+			CheckDlgButton(hDlg,IDC_MAINMENU,DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_SHOWMAINMENU, 1));
+			CheckDlgButton(hDlg,IDC_YAMNASPROTO,DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_SHOWASPROTO, 1));
+			CheckDlgButton(hDlg,IDC_CLOSEONDELETE,DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_CLOSEDELETE, 0));
+			
+			break;
+		case WM_COMMAND:
+		{
+			WORD wNotifyCode = HIWORD(wParam);
+			switch(LOWORD(wParam))
+			{
+				case IDC_YAMNASPROTO:
+				case IDC_MAINMENU:
+				case IDC_CHECKTTB:
+				case IDC_HKFORCE:
+				case IDC_CLOSEONDELETE:
+				case IDC_LONGDATE:
+				case IDC_SMARTDATE:
+				case IDC_NOSECONDS:
+					SendMessage(GetParent(hDlg),PSM_CHANGED,0,0);
+					break;
+
+			}
+			break;
+		}
+		case WM_NOTIFY:
+			switch(((LPNMHDR)lParam)->idFrom)
+			{
+				case 0:
+					switch(((LPNMHDR)lParam)->code)
+					{
+						case PSN_APPLY:
+						{
+							WORD ForceHotKey =(WORD)SendDlgItemMessage(hDlg,IDC_HKFORCE,HKM_GETHOTKEY,0,0);
+							BYTE TTBFCheck =(BYTE)IsDlgButtonChecked(hDlg,IDC_CHECKTTB);
+							BYTE MainMenu = (BYTE)IsDlgButtonChecked(hDlg,IDC_MAINMENU);
+							BYTE CloseDelete = (BYTE)IsDlgButtonChecked(hDlg,IDC_CLOSEONDELETE);
+							BYTE ShowAsProto =  (BYTE)IsDlgButtonChecked(hDlg,IDC_YAMNASPROTO);
+							UINT mod,vk;
+
+							DBWriteContactSettingByte(NULL,YAMN_DBMODULE,YAMN_SHOWASPROTO,ShowAsProto);
+							DBWriteContactSettingWord(NULL,YAMN_DBMODULE,YAMN_HKCHECKMAIL,ForceHotKey);
+							DBWriteContactSettingByte(NULL,YAMN_DBMODULE,YAMN_TTBFCHECK,TTBFCheck);
+							DBWriteContactSettingByte(NULL,YAMN_DBMODULE,YAMN_SHOWMAINMENU,MainMenu);
+							DBWriteContactSettingByte(NULL,YAMN_DBMODULE,YAMN_CLOSEDELETE,CloseDelete);
+							WordToModAndVk(ForceHotKey,&mod,&vk);
+							PostThreadMessage(HotKeyThreadID,WM_YAMN_CHANGEHOTKEY,(WPARAM)mod,(LPARAM)vk);
+
+							optDateTime = 0;
+							if (IsDlgButtonChecked(hDlg,IDC_LONGDATE))optDateTime |= SHOWDATELONG;
+							if (IsDlgButtonChecked(hDlg,IDC_SMARTDATE))optDateTime |= SHOWDATENOTODAY;
+							if (IsDlgButtonChecked(hDlg,IDC_NOSECONDS))optDateTime |= SHOWDATENOSECONDS;
+							DBWriteContactSettingByte(NULL,YAMN_DBMODULE,YAMN_DBTIMEOPTIONS,optDateTime);
+						}
+					}
+			}
+			break;
+	}
+
+	return FALSE;
+}
+
+INT_PTR CALLBACK DlgProcPluginOpt(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+			TranslateDialogDefault(hDlg);
+			break;
+		case WM_COMMAND:
+		{
+			WORD wNotifyCode = HIWORD(wParam);
+			switch(LOWORD(wParam))
+			{
+				case IDC_COMBOPLUGINS:
+					if(wNotifyCode==CBN_SELCHANGE)
+					{
+						HWND hCombo=GetDlgItem(hDlg,IDC_COMBOPLUGINS);
+						PYAMN_PROTOPLUGINQUEUE PParser;
+						PYAMN_FILTERPLUGINQUEUE FParser;
+						int index,id;
+	
+						if(CB_ERR==(index=SendMessage(hCombo,CB_GETCURSEL,0,0)))
+							break;
+						id=SendMessage(hCombo,CB_GETITEMDATA,(WPARAM)index,(LPARAM)0);
+						EnterCriticalSection(PluginRegCS);
+						for(PParser=FirstProtoPlugin;PParser!=NULL;PParser=PParser->Next)
+							if(id==(INT_PTR)PParser->Plugin)
+							{
+								SetDlgItemText(hDlg,IDC_STVER,PParser->Plugin->PluginInfo->Ver);
+								SetDlgItemText(hDlg,IDC_STDESC,PParser->Plugin->PluginInfo->Description == NULL ? "" : PParser->Plugin->PluginInfo->Description);
+								SetDlgItemText(hDlg,IDC_STCOPY,PParser->Plugin->PluginInfo->Copyright == NULL ? "" : PParser->Plugin->PluginInfo->Copyright);
+								SetDlgItemText(hDlg,IDC_STMAIL,PParser->Plugin->PluginInfo->Email == NULL ? "" : PParser->Plugin->PluginInfo->Email);
+								SetDlgItemText(hDlg,IDC_STWWW,PParser->Plugin->PluginInfo->WWW == NULL ? "" : PParser->Plugin->PluginInfo->WWW);
+								break;
+							}
+						for(FParser=FirstFilterPlugin;FParser!=NULL;FParser=FParser->Next)
+							if(id==(INT_PTR)FParser->Plugin)
+							{
+								SetDlgItemText(hDlg,IDC_STVER,FParser->Plugin->PluginInfo->Ver);
+								SetDlgItemText(hDlg,IDC_STDESC,FParser->Plugin->PluginInfo->Description == NULL ? "" : FParser->Plugin->PluginInfo->Description);
+								SetDlgItemText(hDlg,IDC_STCOPY,FParser->Plugin->PluginInfo->Copyright == NULL ? "" : FParser->Plugin->PluginInfo->Copyright);
+								SetDlgItemText(hDlg,IDC_STMAIL,FParser->Plugin->PluginInfo->Email == NULL ? "" : FParser->Plugin->PluginInfo->Email);
+								SetDlgItemText(hDlg,IDC_STWWW,FParser->Plugin->PluginInfo->WWW == NULL ? "" : FParser->Plugin->PluginInfo->WWW);
+								break;
+							}
+						LeaveCriticalSection(PluginRegCS);
+					}
+					break;
+				case IDC_STWWW:
+				{
+					char str[1024];
+
+					GetDlgItemText(hDlg,IDC_STWWW,str,sizeof(str));
+					CallService(MS_UTILS_OPENURL,1,(LPARAM)str);
+					break;
+				}
+
+			}
+			break;
+		}
+		case WM_SHOWWINDOW:
+			if(TRUE==(BOOL)wParam)
+			{
+				PYAMN_PROTOPLUGINQUEUE PParser;
+				PYAMN_FILTERPLUGINQUEUE FParser;
+				int index;
+			
+				EnterCriticalSection(PluginRegCS);
+				for(PParser=FirstProtoPlugin;PParser!=NULL;PParser=PParser->Next)
+				{
+					index=SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_ADDSTRING,0,(LPARAM)PParser->Plugin->PluginInfo->Name);
+					index=SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_SETITEMDATA,(WPARAM)index,(LPARAM)PParser->Plugin);
+				}
+				for(FParser=FirstFilterPlugin;FParser!=NULL;FParser=FParser->Next)
+				{
+					index=SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_ADDSTRING,0,(LPARAM)FParser->Plugin->PluginInfo->Name);
+					index=SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_SETITEMDATA,(WPARAM)index,(LPARAM)FParser->Plugin);
+				}
+
+				LeaveCriticalSection(PluginRegCS);
+				SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_SETCURSEL,(WPARAM)0,(LPARAM)0);
+				SendMessage(hDlg,WM_COMMAND,MAKELONG(IDC_COMBOPLUGINS,CBN_SELCHANGE),(LPARAM)NULL);
+				break;
+			}
+			else		//delete all items in combobox
+			{
+				int cbn=SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_GETCOUNT,(WPARAM)0,(LPARAM)0);
+
+				for(int i=0;i<cbn;i++)
+					SendDlgItemMessage(hDlg,IDC_COMBOPLUGINS,CB_DELETESTRING,(WPARAM)0,(LPARAM)0);
+				break;
+			}
+		case WM_NOTIFY:
+			break;
+	}
+
+	return FALSE;
+}
+
+
+int YAMNOptInitSvc(WPARAM wParam,LPARAM lParam)
+{
+	OPTIONSDIALOGPAGE odp={0};
+	
+	odp.cbSize=sizeof(odp);
+	odp.position=0x00000000;
+	odp.hInstance=YAMNVar.hInst;
+	odp.pszGroup=LPGEN("Network");
+	odp.pszTitle=LPGEN("YAMN");
+	odp.flags=ODPF_BOLDGROUPS;
+//insert YAMN options dialog
+	//odp.pszTemplate=MAKEINTRESOURCEA(IDD_OPTIONS);
+	//odp.pfnDlgProc=(DLGPROC)DlgOptionsProc;
+	//CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
+
+    odp.pszTab = LPGEN("Accounts");
+    odp.pszTemplate = MAKEINTRESOURCEA(IDD_POP3ACCOUNTOPT);
+    odp.pfnDlgProc = DlgProcPOP3AccOpt;
+    CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp);
+ 
+    odp.pszTab = LPGEN("General");
+    odp.pszTemplate = MAKEINTRESOURCEA(IDD_YAMNOPT);
+    odp.pfnDlgProc = DlgProcYAMNOpt;
+    CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp);
+
+	odp.pszTab = LPGEN("Plugins");
+    odp.pszTemplate = MAKEINTRESOURCEA(IDD_PLUGINOPT);
+    odp.pfnDlgProc = DlgProcPluginOpt;
+    CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp);
+
+	if( ServiceExists(MS_POPUP_ADDPOPUPEX) )
+	{
+		odp.pszGroup=LPGEN("PopUps");
+		odp.pszTab=LPGEN("YAMN");
+		odp.pszTemplate = MAKEINTRESOURCEA(IDD_POP3ACCOUNTPOPUP);
+		odp.pfnDlgProc = DlgProcPOP3AccPopup;
+		CallService(MS_OPT_ADDPAGE, wParam, (LPARAM) &odp);
+	}
+	return 0;
+}
+
+
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+BOOL DlgEnableAccountStatus(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST0),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST1),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST2),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST3),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST4),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST5),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST6),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST7),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST8),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST9),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST9),(BOOL)wParam);
+	return TRUE;
+}
+BOOL DlgEnableAccountPopup(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKPOP),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITPOPS),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKCOL),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CPB),(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CPT),(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_RADIOPOPN),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_RADIOPOP1),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKNPOP),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITNPOPS),(IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKNCOL),(IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CPNB),(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CPNT),(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKFPOP),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITFPOPS),(IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKFCOL),(IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CPFB),(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CPFT),(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKAPOP),(BOOL)wParam);
+	return TRUE;
+}
+
+BOOL DlgEnableAccount(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECK),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITSERVER),wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITNAME),wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITPORT),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITLOGIN),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITPASS),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITINTERVAL),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKSND),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKMSG),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKICO),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKAPP),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKKBN),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_BTNAPP),(IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITAPP),(IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_EDITAPPPARAM),(IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKNMSGP),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKFSND),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKFMSG),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKFICO),(BOOL)wParam);
+	/*EnableWindow(GetDlgItem(hDlg,IDC_CHECKST0),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST1),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST2),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST3),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST4),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST5),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST6),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST7),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST8),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST9),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKST9),(BOOL)wParam);*/
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKSTART),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKFORCE),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_COMBOCP),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_STTIMELEFT),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_BTNRESET),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_BTNDEFAULT),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_BTNSTATUS),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKSSL),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKNOTLS),(IsDlgButtonChecked(hDlg,IDC_CHECKSSL)==BST_UNCHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_AUTOBODY),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKCONTACT),(BOOL)wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKCONTACTNICK),(IsDlgButtonChecked(hDlg,IDC_CHECKCONTACT)==BST_CHECKED) && wParam);
+	EnableWindow(GetDlgItem(hDlg,IDC_CHECKCONTACTNOEVENT),(IsDlgButtonChecked(hDlg,IDC_CHECKCONTACT)==BST_CHECKED) && wParam);
+	return TRUE;
+}
+BOOL DlgShowAccountStatus(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	HPOP3ACCOUNT ActualAccount=(HPOP3ACCOUNT)lParam;
+	
+	if((DWORD)wParam==M_SHOWACTUAL)
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read wait\n");
+		#endif
+		WaitToRead(ActualAccount);		//we do not need to check if account is deleted. It is not deleted, because only thread that can delete account is this thread
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read enter\n");
+		#endif
+		CheckDlgButton(hDlg,IDC_CHECKST0,ActualAccount->StatusFlags & YAMN_ACC_ST0 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST1,ActualAccount->StatusFlags & YAMN_ACC_ST1 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST2,ActualAccount->StatusFlags & YAMN_ACC_ST2 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST3,ActualAccount->StatusFlags & YAMN_ACC_ST3 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST4,ActualAccount->StatusFlags & YAMN_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST5,ActualAccount->StatusFlags & YAMN_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST6,ActualAccount->StatusFlags & YAMN_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST7,ActualAccount->StatusFlags & YAMN_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST8,ActualAccount->StatusFlags & YAMN_ACC_ST8 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST9,ActualAccount->StatusFlags & YAMN_ACC_ST9 ? BST_CHECKED : BST_UNCHECKED);
+		ReadDone(ActualAccount);
+	}
+	else
+	{
+		CheckDlgButton(hDlg,IDC_CHECKST0,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST1,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST2,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST3,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST4,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST5,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST6,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST7,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST8,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST9,BST_CHECKED);
+	}
+	return TRUE;
+}
+BOOL DlgShowAccountPopup(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	HPOP3ACCOUNT ActualAccount=(HPOP3ACCOUNT)lParam;
+	
+	if((DWORD)wParam==M_SHOWACTUAL)
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read wait\n");
+		#endif
+		WaitToRead(ActualAccount);		//we do not need to check if account is deleted. It is not deleted, because only thread that can delete account is this thread
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read enter\n");
+		#endif
+		SetDlgItemInt(hDlg,IDC_EDITPOPS,ActualAccount->NewMailN.PopUpTime,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITNPOPS,ActualAccount->NoNewMailN.PopUpTime,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITFPOPS,ActualAccount->BadConnectN.PopUpTime,FALSE);
+
+
+		CheckDlgButton(hDlg,IDC_CHECKPOP,ActualAccount->NewMailN.Flags & YAMN_ACC_POP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKCOL,ActualAccount->NewMailN.Flags & YAMN_ACC_POPC ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKNPOP,ActualAccount->NoNewMailN.Flags & YAMN_ACC_POP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKNCOL,ActualAccount->NoNewMailN.Flags & YAMN_ACC_POPC ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKFPOP,ActualAccount->BadConnectN.Flags & YAMN_ACC_POP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKFCOL,ActualAccount->BadConnectN.Flags & YAMN_ACC_POPC ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOPN,ActualAccount->Flags & YAMN_ACC_POPN ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOP1,ActualAccount->Flags & YAMN_ACC_POPN ? BST_UNCHECKED : BST_CHECKED);
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read done\n");
+		#endif
+		ReadDone(ActualAccount);
+	}				       
+	else			            //default
+	{
+
+		SetDlgItemInt(hDlg,IDC_EDITPOPS,0,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITNPOPS,0,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITFPOPS,0,FALSE);
+		CheckDlgButton(hDlg,IDC_CHECKPOP,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCOL,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKNPOP,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKNCOL,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFPOP,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFCOL,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOPN,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOP1,BST_CHECKED);
+	}
+	return TRUE;
+}
+BOOL DlgShowAccount(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	HPOP3ACCOUNT ActualAccount=(HPOP3ACCOUNT)lParam;
+	int i;
+	
+	if((DWORD)wParam==M_SHOWACTUAL)
+	{
+		TCHAR accstatus[256];
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read wait\n");
+		#endif
+		WaitToRead(ActualAccount);		//we do not need to check if account is deleted. It is not deleted, because only thread that can delete account is this thread
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read enter\n");
+		#endif
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITSERVER,(LPARAM)ActualAccount->Server->Name);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITNAME,(LPARAM)ActualAccount->Name);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITLOGIN,(LPARAM)ActualAccount->Server->Login);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITPASS,(LPARAM)ActualAccount->Server->Passwd);
+		DlgSetItemTextW(hDlg,(WPARAM)IDC_EDITAPP,(LPARAM)ActualAccount->NewMailN.App);
+		DlgSetItemTextW(hDlg,(WPARAM)IDC_EDITAPPPARAM,(LPARAM)ActualAccount->NewMailN.AppParam);
+		SetDlgItemInt(hDlg,IDC_EDITPORT,ActualAccount->Server->Port,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITINTERVAL,ActualAccount->Interval/60,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITPOPS,ActualAccount->NewMailN.PopUpTime,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITNPOPS,ActualAccount->NoNewMailN.PopUpTime,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITFPOPS,ActualAccount->BadConnectN.PopUpTime,FALSE);
+		for(i=0;i<=CPLENSUPP;i++)
+			if((i<CPLENSUPP) && (CodePageNamesSupp[i].CP==ActualAccount->CP))
+			{
+				SendMessage(GetDlgItem(hDlg,IDC_COMBOCP),CB_SETCURSEL,(WPARAM)i,(LPARAM)0);
+				break;
+			}
+		if(i==CPLENSUPP)
+			SendMessage(GetDlgItem(hDlg,IDC_COMBOCP),CB_SETCURSEL,(WPARAM)CPDEFINDEX,(LPARAM)0);
+
+		CheckDlgButton(hDlg,IDC_CHECK,ActualAccount->Flags & YAMN_ACC_ENA ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKSND,ActualAccount->NewMailN.Flags & YAMN_ACC_SND ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKMSG,ActualAccount->NewMailN.Flags & YAMN_ACC_MSG ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKICO,ActualAccount->NewMailN.Flags & YAMN_ACC_ICO ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKPOP,ActualAccount->NewMailN.Flags & YAMN_ACC_POP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKCOL,ActualAccount->NewMailN.Flags & YAMN_ACC_POPC ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKAPP,ActualAccount->NewMailN.Flags & YAMN_ACC_APP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKKBN,ActualAccount->NewMailN.Flags & YAMN_ACC_KBN ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKNPOP,ActualAccount->NoNewMailN.Flags & YAMN_ACC_POP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKNCOL,ActualAccount->NoNewMailN.Flags & YAMN_ACC_POPC ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKNMSGP,ActualAccount->NoNewMailN.Flags & YAMN_ACC_MSGP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKFSND,ActualAccount->BadConnectN.Flags & YAMN_ACC_SND ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFMSG,ActualAccount->BadConnectN.Flags & YAMN_ACC_MSG ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFICO,ActualAccount->BadConnectN.Flags & YAMN_ACC_ICO ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFPOP,ActualAccount->BadConnectN.Flags & YAMN_ACC_POP ? BST_CHECKED : BST_UNCHECKED); 
+		CheckDlgButton(hDlg,IDC_CHECKFCOL,ActualAccount->BadConnectN.Flags & YAMN_ACC_POPC ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOPN,ActualAccount->Flags & YAMN_ACC_POPN ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOP1,ActualAccount->Flags & YAMN_ACC_POPN ? BST_UNCHECKED : BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKSSL,ActualAccount->Flags & YAMN_ACC_SSL23 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKNOTLS,ActualAccount->Flags & YAMN_ACC_NOTLS ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKAPOP,ActualAccount->Flags & YAMN_ACC_APOP ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_AUTOBODY,ActualAccount->Flags & YAMN_ACC_BODY ? BST_CHECKED : BST_UNCHECKED);
+		/*CheckDlgButton(hDlg,IDC_CHECKST0,ActualAccount->StatusFlags & YAMN_ACC_ST0 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST1,ActualAccount->StatusFlags & YAMN_ACC_ST1 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST2,ActualAccount->StatusFlags & YAMN_ACC_ST2 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST3,ActualAccount->StatusFlags & YAMN_ACC_ST3 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST4,ActualAccount->StatusFlags & YAMN_ACC_ST4 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST5,ActualAccount->StatusFlags & YAMN_ACC_ST5 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST6,ActualAccount->StatusFlags & YAMN_ACC_ST6 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST7,ActualAccount->StatusFlags & YAMN_ACC_ST7 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST8,ActualAccount->StatusFlags & YAMN_ACC_ST8 ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST9,ActualAccount->StatusFlags & YAMN_ACC_ST9 ? BST_CHECKED : BST_UNCHECKED);*/
+		Check0=ActualAccount->StatusFlags & YAMN_ACC_ST0;
+		Check1=ActualAccount->StatusFlags & YAMN_ACC_ST1;
+		Check2=ActualAccount->StatusFlags & YAMN_ACC_ST2;
+		Check3=ActualAccount->StatusFlags & YAMN_ACC_ST3;
+		Check4=ActualAccount->StatusFlags & YAMN_ACC_ST4;
+		Check5=ActualAccount->StatusFlags & YAMN_ACC_ST5;
+		Check6=ActualAccount->StatusFlags & YAMN_ACC_ST6;
+		Check7=ActualAccount->StatusFlags & YAMN_ACC_ST7;
+		Check8=ActualAccount->StatusFlags & YAMN_ACC_ST8;
+		Check9=ActualAccount->StatusFlags & YAMN_ACC_ST9;
+		CheckDlgButton(hDlg,IDC_CHECKSTART,ActualAccount->StatusFlags & YAMN_ACC_STARTS ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFORCE,ActualAccount->StatusFlags & YAMN_ACC_FORCE ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCONTACT,ActualAccount->NewMailN.Flags & YAMN_ACC_CONT ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCONTACTNICK,ActualAccount->NewMailN.Flags & YAMN_ACC_CONTNICK ? BST_CHECKED : BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCONTACTNOEVENT,ActualAccount->NewMailN.Flags & YAMN_ACC_CONTNOEVENT ? BST_CHECKED : BST_UNCHECKED);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"Options:SHOWACCOUNT:ActualAccountSO-read done\n");
+#endif
+		GetAccountStatus(ActualAccount,accstatus);
+		SetDlgItemText(hDlg,IDC_STSTATUS,accstatus);
+		ReadDone(ActualAccount);
+	}				       
+	else			            //default
+	{
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITSERVER,(LPARAM)NULL);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITNAME,(LPARAM)NULL);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITLOGIN,(LPARAM)NULL);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITPASS,(LPARAM)NULL);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITAPP,(LPARAM)NULL);
+		DlgSetItemText(hDlg,(WPARAM)IDC_EDITAPPPARAM,(LPARAM)NULL);
+		DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+		SetDlgItemInt(hDlg,IDC_EDITPORT,110,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITINTERVAL,30,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITPOPS,0,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITNPOPS,0,FALSE);
+		SetDlgItemInt(hDlg,IDC_EDITFPOPS,0,FALSE);
+		SendMessage(GetDlgItem(hDlg,IDC_COMBOCP),CB_SETCURSEL,(WPARAM)CPDEFINDEX,(LPARAM)0);
+		CheckDlgButton(hDlg,IDC_CHECK,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKSND,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKMSG,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKICO,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKPOP,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCOL,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKAPP,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKPOP,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCOL,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFSND,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFMSG,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFICO,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFPOP,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFCOL,BST_CHECKED);
+		/*CheckDlgButton(hDlg,IDC_CHECKST0,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST1,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST2,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST3,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST4,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST5,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST6,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST7,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST8,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKST9,BST_CHECKED);*/
+		CheckDlgButton(hDlg,IDC_CHECKSTART,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKFORCE,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOPN,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_RADIOPOP1,BST_CHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKSSL,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKNOTLS,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKAPOP,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_AUTOBODY,BST_UNCHECKED);
+		CheckDlgButton(hDlg,IDC_CHECKCONTACT,BST_CHECKED);
+
+		SetDlgItemText(hDlg,IDC_STSTATUS,TranslateT("No account selected"));
+	}
+	return TRUE;
+}
+
+BOOL DlgShowAccountColors(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	HPOP3ACCOUNT ActualAccount=(HPOP3ACCOUNT)lParam;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"Options:SHOWACCOUNTCOLORS:ActualAccountSO-read wait\n");
+#endif
+	WaitToRead(ActualAccount);		//we do not need to check if account is deleted. It is not deleted, because only thread that can delete account is this thread
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"Options:SHOWACCOUNTCOLORS:ActualAccountSO-read enter\n");
+#endif
+	if(ActualAccount->NewMailN.Flags & YAMN_ACC_POPC)
+	{
+		SendDlgItemMessage(hDlg,IDC_CPB,CPM_SETCOLOUR,0,(LPARAM)ActualAccount->NewMailN.PopUpB);
+		SendDlgItemMessage(hDlg,IDC_CPT,CPM_SETCOLOUR,0,(LPARAM)ActualAccount->NewMailN.PopUpT);
+	}
+	else
+	{
+		SendDlgItemMessage(hDlg,IDC_CPB,CPM_SETCOLOUR,0,(LPARAM)GetSysColor(COLOR_BTNFACE));
+		SendDlgItemMessage(hDlg,IDC_CPT,CPM_SETCOLOUR,0,(LPARAM)GetSysColor(COLOR_WINDOWTEXT));
+	}
+	if(ActualAccount->BadConnectN.Flags & YAMN_ACC_POPC)
+	{
+		SendDlgItemMessage(hDlg,IDC_CPFB,CPM_SETCOLOUR,0,(LPARAM)ActualAccount->BadConnectN.PopUpB);
+		SendDlgItemMessage(hDlg,IDC_CPFT,CPM_SETCOLOUR,0,(LPARAM)ActualAccount->BadConnectN.PopUpT);
+	}
+	else
+	{
+		SendDlgItemMessage(hDlg,IDC_CPFB,CPM_SETCOLOUR,0,(LPARAM)GetSysColor(COLOR_BTNFACE));
+		SendDlgItemMessage(hDlg,IDC_CPFT,CPM_SETCOLOUR,0,(LPARAM)GetSysColor(COLOR_WINDOWTEXT));
+	}
+	if(ActualAccount->NoNewMailN.Flags & YAMN_ACC_POPC)
+	{
+		SendDlgItemMessage(hDlg,IDC_CPNB,CPM_SETCOLOUR,0,(LPARAM)ActualAccount->NoNewMailN.PopUpB);
+		SendDlgItemMessage(hDlg,IDC_CPNT,CPM_SETCOLOUR,0,(LPARAM)ActualAccount->NoNewMailN.PopUpT);
+	}
+	else
+	{
+		SendDlgItemMessage(hDlg,IDC_CPNB,CPM_SETCOLOUR,0,(LPARAM)GetSysColor(COLOR_BTNFACE));
+		SendDlgItemMessage(hDlg,IDC_CPNT,CPM_SETCOLOUR,0,(LPARAM)GetSysColor(COLOR_WINDOWTEXT));
+	}
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"Options:SHOWACCOUNTCOLORS:ActualAccountSO-read done\n");
+#endif
+	ReadDone(ActualAccount);		//we do not need to check if account is deleted. It is not deleted, because only thread that can delete account is this thread
+	return TRUE;
+}
+
+BOOL DlgSetItemText(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	if((TCHAR*)lParam==NULL)
+		SetDlgItemText(hDlg,(UINT)wParam,_T(""));
+	else
+		SetDlgItemText(hDlg,(UINT)wParam,(TCHAR *)lParam);
+	return TRUE;
+}
+
+BOOL DlgSetItemTextW(HWND hDlg,WPARAM wParam,LPARAM lParam)
+{
+	if((WCHAR*)lParam==NULL)
+		SetDlgItemTextW(hDlg,(UINT)wParam,(LPWSTR)L"");
+	else
+		SetDlgItemTextW(hDlg,(UINT)wParam,(LPWSTR)lParam);
+	return TRUE;
+}
+
+BOOL CALLBACK DlgProcPOP3AccStatusOpt(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	static HPOP3ACCOUNT ActualAccount;
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+		{
+			ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)DlgInput);
+			if(ActualAccount != NULL)
+			{
+				DlgShowAccountStatus(hDlg,(WPARAM)M_SHOWACTUAL,(LPARAM)ActualAccount);
+				DlgEnableAccountStatus(hDlg,(WPARAM)TRUE,(LPARAM)TRUE);
+			}
+			else
+			{
+				CheckDlgButton(hDlg,IDC_CHECKST0,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST1,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST2,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST3,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST4,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST5,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST6,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST7,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST8,BST_CHECKED);
+				CheckDlgButton(hDlg,IDC_CHECKST9,BST_CHECKED);
+			}
+			TranslateDialogDefault(hDlg);
+			SendMessage(GetParent(hDlg),PSM_UNCHANGED,(WPARAM)hDlg,0);
+			return TRUE;
+			break;
+		}
+		case WM_COMMAND:
+		{
+		
+			WORD wNotifyCode = HIWORD(wParam);
+			switch(LOWORD(wParam))
+			{
+				case IDOK:
+					Check0=(IsDlgButtonChecked(hDlg,IDC_CHECKST0)==BST_CHECKED);
+					Check1=(IsDlgButtonChecked(hDlg,IDC_CHECKST1)==BST_CHECKED);
+					Check2=(IsDlgButtonChecked(hDlg,IDC_CHECKST2)==BST_CHECKED);
+					Check3=(IsDlgButtonChecked(hDlg,IDC_CHECKST3)==BST_CHECKED);
+					Check4=(IsDlgButtonChecked(hDlg,IDC_CHECKST4)==BST_CHECKED);
+					Check5=(IsDlgButtonChecked(hDlg,IDC_CHECKST5)==BST_CHECKED);
+					Check6=(IsDlgButtonChecked(hDlg,IDC_CHECKST6)==BST_CHECKED);
+					Check7=(IsDlgButtonChecked(hDlg,IDC_CHECKST7)==BST_CHECKED);
+					Check8=(IsDlgButtonChecked(hDlg,IDC_CHECKST8)==BST_CHECKED);
+					Check9=(IsDlgButtonChecked(hDlg,IDC_CHECKST9)==BST_CHECKED);
+					WindowList_BroadcastAsync(YAMNVar.MessageWnds,WM_YAMN_CHANGESTATUSOPTION,(WPARAM)0,(LPARAM)0);
+					EndDialog(hDlg,0);
+					DestroyWindow(hDlg);
+					break;
+				
+				case IDCANCEL:
+					EndDialog(hDlg,0);
+					DestroyWindow(hDlg);
+					break;
+				
+				default:
+                        break;
+			}
+		}
+		default:
+			break;
+	}
+	return FALSE;
+}
+
+
+INT_PTR CALLBACK DlgProcPOP3AccOpt(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	BOOL Changed=FALSE;
+	static BOOL InList=FALSE;
+	static HPOP3ACCOUNT ActualAccount;
+	static UCHAR ActualStatus;
+//	static struct CPOP3Options POP3Options;
+
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+		{
+			int i;
+
+			EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),FALSE);
+
+			DlgEnableAccount(hDlg,(WPARAM)FALSE,(LPARAM)FALSE);
+			DlgShowAccount(hDlg,(WPARAM)M_SHOWDEFAULT,0);
+
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"Options:INITDIALOG:AccountBrowserSO-read wait\n");
+			#endif
+			WaitToReadSO(POP3Plugin->AccountBrowserSO);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"Options:INITDIALOG:AccountBrowserSO-read enter\n");
+			#endif
+			//SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_ADDSTRING,0,(LPARAM)""); //this was in YAMN.rc initialisation but seems to be useless
+			if(POP3Plugin->FirstAccount!=NULL)
+				for(ActualAccount=(HPOP3ACCOUNT)POP3Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=(HPOP3ACCOUNT)ActualAccount->Next)
+					if(ActualAccount->Name!=NULL)
+						SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_ADDSTRING,0,(LPARAM)ActualAccount->Name);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"Options:INITDIALOG:AccountBrowserSO-read done\n");
+			#endif
+			ReadDoneSO(POP3Plugin->AccountBrowserSO);
+			SendDlgItemMessage(hDlg,IDC_COMBOCP,CB_ADDSTRING,0,(LPARAM)TranslateT("Default"));
+			for(i=1;i<CPLENSUPP;i++){
+				CPINFOEX info; GetCPInfoEx(CodePageNamesSupp[i].CP,0,&info);
+				size_t len = strlen(info.CodePageName+7);
+				info.CodePageName[len+6]=0;
+				SendDlgItemMessage(hDlg,IDC_COMBOCP,CB_ADDSTRING,0,(LPARAM)info.CodePageName+7);
+			}
+
+			SendMessage(GetDlgItem(hDlg,IDC_COMBOCP),CB_SETCURSEL,(WPARAM)CPDEFINDEX,(LPARAM)0);
+			ActualAccount=NULL;			
+			TranslateDialogDefault(hDlg);
+			SendMessage(GetParent(hDlg),PSM_UNCHANGED,(WPARAM)hDlg,0);
+			return TRUE;
+		}
+
+		case WM_SHOWWINDOW:
+			if((BOOL)wParam==FALSE)
+			{
+				WindowList_Remove(pYAMNVar->MessageWnds,hDlg);
+				SendMessage(GetParent(hDlg),PSM_UNCHANGED,(WPARAM)hDlg,(LPARAM)0);
+			}
+			else
+				WindowList_Add(pYAMNVar->MessageWnds,hDlg,NULL);
+			return TRUE;
+		case WM_YAMN_CHANGESTATUS:
+		{
+			char accstatus[256];
+
+			if((HPOP3ACCOUNT)wParam!=ActualAccount)
+				break;
+			GetAccountStatus(ActualAccount,accstatus);
+			SetDlgItemTextA(hDlg,IDC_STSTATUS,accstatus);
+			return TRUE;
+		}
+			
+		case WM_YAMN_CHANGESTATUSOPTION:
+		{
+			Changed=TRUE;
+			SendMessage(GetParent(hDlg),PSM_CHANGED,0,0);
+			return TRUE;
+		}
+			
+		case WM_YAMN_CHANGETIME:
+			if((HPOP3ACCOUNT)wParam==ActualAccount)
+			{
+				TCHAR Text[256];
+				_stprintf(Text,Translate("Time left to next check [s]: %d"),(DWORD)lParam);
+				SetDlgItemText(hDlg,IDC_STTIMELEFT,Text);
+			}
+			return TRUE;
+		case WM_COMMAND:
+		{
+			WORD wNotifyCode = HIWORD(wParam);
+			switch(LOWORD(wParam))
+			{
+				LONG Result;
+				case IDC_COMBOACCOUNT:
+					switch(wNotifyCode)
+					{
+						case CBN_EDITCHANGE :
+							ActualAccount=NULL;
+							DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+							
+							if(GetDlgItemText(hDlg,IDC_COMBOACCOUNT,DlgInput,sizeof(DlgInput)/sizeof(TCHAR)))
+								DlgEnableAccount(hDlg,(WPARAM)TRUE,(LPARAM)FALSE);
+							else
+								DlgEnableAccount(hDlg,(WPARAM)FALSE,(LPARAM)FALSE);
+							break;
+						case CBN_KILLFOCUS:
+							GetDlgItemText(hDlg,IDC_COMBOACCOUNT,DlgInput,sizeof(DlgInput)/sizeof(TCHAR));
+							if(NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)DlgInput)))
+							{
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+								EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),FALSE);
+								if(lstrlen(DlgInput))
+									DlgEnableAccount(hDlg,(WPARAM)TRUE,(LPARAM)TRUE);
+								else
+									DlgEnableAccount(hDlg,(WPARAM)FALSE,(LPARAM)FALSE);
+							}
+							else
+							{
+								DlgShowAccount(hDlg,(WPARAM)M_SHOWACTUAL,(LPARAM)ActualAccount);
+								DlgEnableAccount(hDlg,(WPARAM)TRUE,(LPARAM)TRUE);
+								EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),TRUE);
+							}
+							break;
+						case CBN_SELCHANGE:
+							if(CB_ERR!=(Result=SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETCURSEL,0,0)))
+								SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETLBTEXT,(WPARAM)Result,(LPARAM)DlgInput);
+							
+							if((Result==CB_ERR) || (NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)DlgInput))))
+							{
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+								EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),FALSE);
+							}
+							else
+							{
+								DlgShowAccount(hDlg,(WPARAM)M_SHOWACTUAL,(LPARAM)ActualAccount);
+								DlgEnableAccount(hDlg,(WPARAM)TRUE,(LPARAM)FALSE);
+								EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),TRUE);
+							}
+							break;
+					}
+					break;
+				case IDC_COMBOCP:
+					{
+						int sel = SendDlgItemMessage(hDlg,IDC_COMBOCP,CB_GETCURSEL,0,0);
+						CPINFOEX info; GetCPInfoEx(CodePageNamesSupp[sel].CP,0,&info);
+						DlgSetItemText(hDlg,(WPARAM)IDC_STSTATUS,(LPARAM)info.CodePageName);
+					}
+				case IDC_CHECK:
+				case IDC_CHECKSND:
+				case IDC_CHECKMSG:
+				case IDC_CHECKICO:
+				case IDC_CHECKFSND:
+				case IDC_CHECKFMSG:
+				case IDC_CHECKFICO:
+				case IDC_CHECKST0:
+				case IDC_CHECKST1:
+				case IDC_CHECKST2:
+				case IDC_CHECKST3:
+				case IDC_CHECKST4:
+				case IDC_CHECKST5:
+				case IDC_CHECKST6:
+				case IDC_CHECKST7:
+				case IDC_CHECKST8:
+				case IDC_CHECKST9:
+				case IDC_CHECKSTART:
+				case IDC_CHECKFORCE:
+				case IDC_EDITAPPPARAM:
+				case IDC_CHECKAPOP:
+				case IDC_AUTOBODY:
+				case IDC_CHECKCONTACTNICK:
+				case IDC_CHECKCONTACTNOEVENT:
+				case IDC_CHECKNOTLS:
+					Changed=TRUE;
+					break;
+				case IDC_CHECKCONTACT:
+					Changed=IsDlgButtonChecked(hDlg,IDC_CHECKCONTACT)==BST_CHECKED;
+					EnableWindow(GetDlgItem(hDlg,IDC_CHECKCONTACTNICK),Changed);
+					EnableWindow(GetDlgItem(hDlg,IDC_CHECKCONTACTNOEVENT),Changed);
+					Changed=TRUE;
+					break;
+				case IDC_CHECKSSL:
+				{
+					BOOL SSLC=(IsDlgButtonChecked(hDlg,IDC_CHECKSSL)==BST_CHECKED);
+					SetDlgItemInt(hDlg,IDC_EDITPORT,SSLC ? 995 : 110,FALSE);
+					EnableWindow(GetDlgItem(hDlg,IDC_CHECKNOTLS),SSLC?0:1);
+				}
+					Changed=TRUE;
+					break;
+				case IDC_CPB:
+				case IDC_CPT:
+				case IDC_CPFB:
+				case IDC_CPFT:
+				case IDC_CPNB:
+				case IDC_CPNT:
+					if(HIWORD(wParam)!=CPN_COLOURCHANGED)
+						break;
+				case IDC_CHECKKBN:
+					Changed=TRUE;
+					break;
+				case IDC_CHECKAPP:
+					Changed=TRUE;
+					EnableWindow(GetDlgItem(hDlg,IDC_BTNAPP),IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_EDITAPP),IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_EDITAPPPARAM),IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED);
+					break;
+				case IDC_BTNSTATUS:
+				{
+					DialogBoxParamW(pYAMNVar->hInst,MAKEINTRESOURCEW(IDD_CHOOSESTATUSMODES),hDlg,(DLGPROC)DlgProcPOP3AccStatusOpt,(LPARAM)NULL);										
+					break;
+				}
+
+				case IDC_BTNADD:
+				{
+					int index=0;
+					DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+					DlgShowAccount(hDlg,(WPARAM)M_SHOWDEFAULT,0);
+					DlgEnableAccount(hDlg,(WPARAM)TRUE,(LPARAM)TRUE);
+					EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),FALSE);
+					DlgSetItemText(hDlg,(WPARAM)IDC_EDITNAME,(LPARAM)TranslateT("New Account"));
+					index=SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_ADDSTRING,0,(LPARAM)TranslateT("New Account"));
+					
+					if((index==CB_ERR) || (index==CB_ERRSPACE))
+						break;
+					SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_SETCURSEL,(WPARAM)index,(LPARAM)TranslateT("New Account"));
+					break;
+				}
+				
+				case IDC_BTNAPP:
+				{
+					OPENFILENAME OFNStruct;
+
+					memset(&OFNStruct,0,sizeof(OPENFILENAME));
+					OFNStruct.lStructSize=sizeof(OPENFILENAME);
+					OFNStruct.hwndOwner=hDlg;
+					TCHAR filter[MAX_PATH];
+					mir_sntprintf(filter, SIZEOF(filter), _T("%s (*.exe;*.bat;*.cmd;*.com)%c*.exe;*.bat;*.cmd;*.com%c%s (*.*)%c*.*%c"), TranslateT("Executables"), 0, 0, TranslateT("All Files"), 0, 0);
+					OFNStruct.lpstrFilter= filter;
+					OFNStruct.nFilterIndex=1;
+					OFNStruct.nMaxFile=MAX_PATH;
+					OFNStruct.lpstrFile=new TCHAR[MAX_PATH];
+					OFNStruct.lpstrFile[0]=(TCHAR)0;
+					OFNStruct.lpstrTitle=Translate("Select executable used for notification");
+					OFNStruct.Flags=OFN_FILEMUSTEXIST | OFN_NONETWORKBUTTON | OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR;
+					if(!GetOpenFileName(&OFNStruct))
+					{
+						if(CommDlgExtendedError())
+							MessageBox(hDlg,_T("Dialog box error"),_T("Failed"),MB_OK);
+					}
+					else
+						DlgSetItemText(hDlg,(WPARAM)IDC_EDITAPP,(LPARAM)OFNStruct.lpstrFile);
+					delete[] OFNStruct.lpstrFile;
+					break;
+				}
+				case IDC_BTNDEFAULT:
+					DlgShowAccount(hDlg,(WPARAM)M_SHOWDEFAULT,0);
+//					DlgShowAccountColors(hDlg,0,(LPARAM)ActualAccount);
+					break;
+				case IDC_BTNDEL:
+					GetDlgItemText(hDlg,IDC_COMBOACCOUNT,DlgInput,sizeof(DlgInput)/sizeof(TCHAR));
+					EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),FALSE);
+					if((CB_ERR==(Result=SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETCURSEL,0,0)))
+						|| (NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)DlgInput))))
+						return TRUE;
+
+					if(IDOK!=MessageBox(hDlg,Translate("Do you really want to delete this account?"),Translate("Delete account confirmation"),MB_OKCANCEL | MB_ICONWARNING))
+						return TRUE;
+
+					DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)Translate("Please wait while no account is in use."));
+
+					if(ActualAccount->hContact != NULL)
+						CallService(MS_DB_CONTACT_DELETE,(WPARAM)(HANDLE) ActualAccount->hContact, 0);
+
+					CallService(MS_YAMN_DELETEACCOUNT,(WPARAM)POP3Plugin,(LPARAM)ActualAccount);
+					
+					//We can consider our account as deleted.
+
+					SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_DELETESTRING,(WPARAM)Result,0);
+					DlgSetItemText(hDlg,(WPARAM)IDC_COMBOACCOUNT,(LPARAM)NULL);
+					DlgEnableAccount(hDlg,(WPARAM)FALSE,0);
+					DlgShowAccount(hDlg,(WPARAM)M_SHOWDEFAULT,0);
+//					Beep(100,50);
+					break;
+				case IDC_BTNRESET:
+					if(ActualAccount!=NULL)
+						ActualAccount->TimeLeft=ActualAccount->Interval;
+					return 1;
+ 			}
+			if(HIWORD(wParam)==EN_CHANGE)
+				Changed=TRUE;
+			break;
+		}
+		case WM_NOTIFY:
+			switch(((LPNMHDR)lParam)->idFrom)
+			{
+				case 0:
+					switch(((LPNMHDR)lParam)->code)
+					{
+						case PSN_APPLY:
+						{
+							TCHAR Text[MAX_PATH];
+							WCHAR TextW[MAX_PATH];
+							BOOL Translated,NewAcc=FALSE,Check,CheckMsg,CheckSnd,CheckIco,CheckApp, CheckAPOP;
+							BOOL CheckNMsgP,CheckFMsg,CheckFSnd,CheckFIco;
+							BOOL CheckKBN, CheckContact,CheckContactNick,CheckContactNoEvent;
+							BOOL CheckSSL, CheckABody, CheckNoTLS;
+							//BOOL Check0,Check1,Check2,Check3,Check4,Check5,Check6,Check7,Check8,Check9,
+							BOOL CheckStart,CheckForce;
+							size_t Length,index;
+							UINT Port,Interval;
+
+							if(GetDlgItemText(hDlg,IDC_COMBOACCOUNT,Text,sizeof(Text)/sizeof(TCHAR)))
+							{
+								Check=(IsDlgButtonChecked(hDlg,IDC_CHECK)==BST_CHECKED);
+								CheckSSL=(IsDlgButtonChecked(hDlg,IDC_CHECKSSL)==BST_CHECKED);
+								CheckNoTLS=(IsDlgButtonChecked(hDlg,IDC_CHECKNOTLS)==BST_CHECKED);
+								CheckAPOP=(IsDlgButtonChecked(hDlg,IDC_CHECKAPOP)==BST_CHECKED);
+
+								CheckABody=(IsDlgButtonChecked(hDlg,IDC_AUTOBODY)==BST_CHECKED);
+								CheckMsg=(IsDlgButtonChecked(hDlg,IDC_CHECKMSG)==BST_CHECKED);
+								CheckSnd=(IsDlgButtonChecked(hDlg,IDC_CHECKSND)==BST_CHECKED);
+								CheckIco=(IsDlgButtonChecked(hDlg,IDC_CHECKICO)==BST_CHECKED);
+
+								CheckApp=(IsDlgButtonChecked(hDlg,IDC_CHECKAPP)==BST_CHECKED);
+								CheckKBN=(IsDlgButtonChecked(hDlg,IDC_CHECKKBN)==BST_CHECKED);
+								CheckContact=(IsDlgButtonChecked(hDlg,IDC_CHECKCONTACT)==BST_CHECKED);
+								CheckContactNick=(IsDlgButtonChecked(hDlg,IDC_CHECKCONTACTNICK)==BST_CHECKED);
+								CheckContactNoEvent=(IsDlgButtonChecked(hDlg,IDC_CHECKCONTACTNOEVENT)==BST_CHECKED);
+
+								CheckFSnd=(IsDlgButtonChecked(hDlg,IDC_CHECKFSND)==BST_CHECKED);
+								CheckFMsg=(IsDlgButtonChecked(hDlg,IDC_CHECKFMSG)==BST_CHECKED);
+								CheckFIco=(IsDlgButtonChecked(hDlg,IDC_CHECKFICO)==BST_CHECKED);
+
+								CheckNMsgP=(IsDlgButtonChecked(hDlg,IDC_CHECKNMSGP)==BST_CHECKED);
+
+								Port=GetDlgItemInt(hDlg,IDC_EDITPORT,&Translated,FALSE);
+								if(!Translated)
+								{
+									MessageBox(hDlg,Translate("This is not a valid number value"),Translate("Input error"),MB_OK);
+									SetFocus(GetDlgItem(hDlg,IDC_EDITPORT));
+								        break;
+								}
+								Interval=GetDlgItemInt(hDlg,IDC_EDITINTERVAL,&Translated,FALSE);
+								if(!Translated)
+								{
+									MessageBox(hDlg,Translate("This is not a valid number value"),Translate("Input error"),MB_OK);
+									SetFocus(GetDlgItem(hDlg,IDC_EDITINTERVAL));
+									break;
+								}
+
+								GetDlgItemText(hDlg,IDC_EDITAPP,Text,sizeof(Text)/sizeof(TCHAR));
+								if(CheckApp && !(Length=_tcslen(Text)))
+								{
+									MessageBox(hDlg,TranslateT("Please select application to run"),TranslateT("Input error"),MB_OK);
+									break;
+								}
+
+								GetDlgItemText(hDlg,IDC_COMBOACCOUNT,Text,sizeof(Text)/sizeof(TCHAR));
+								if(!(Length=_tcslen(Text)))
+									GetDlgItemText(hDlg,IDC_EDITNAME,Text,sizeof(Text)/sizeof(TCHAR));
+									if(!(Length=_tcslen(Text)))
+										break;
+
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)TranslateT("Please wait while no account is in use."));
+
+								if(NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)Text)))
+								{
+									NewAcc=TRUE;
+									#ifdef DEBUG_SYNCHRO                    
+									DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write wait\n");
+									#endif                                  
+									WaitToWriteSO(POP3Plugin->AccountBrowserSO);
+									#ifdef DEBUG_SYNCHRO                    
+									DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write enter\n");
+									#endif                                  
+									if(NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_GETNEXTFREEACCOUNT,(WPARAM)POP3Plugin,(LPARAM)YAMN_ACCOUNTVERSION)))
+									{
+										#ifdef DEBUG_SYNCHRO                    
+										DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write done\n");
+										#endif                                  
+										WriteDoneSO(POP3Plugin->AccountBrowserSO);
+										MessageBox(hDlg,Translate("Cannot allocate memory space for new account"),Translate("Memory error"),MB_OK);
+										break;
+									}
+								}
+								else
+								{
+									#ifdef DEBUG_SYNCHRO                    
+									DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write wait\n");
+									#endif                                  
+									//We have to get full access to AccountBrowser, so other iterating thrads cannot get new account until new account is right set
+									WaitToWriteSO(POP3Plugin->AccountBrowserSO);
+									#ifdef DEBUG_SYNCHRO                    
+									DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write enter\n");
+									#endif                                  
+								}
+								#ifdef DEBUG_SYNCHRO
+								DebugLog(SynchroFile,"Options:APPLY:ActualAccountSO-write wait\n");
+								#endif
+								if(WAIT_OBJECT_0!=WaitToWrite(ActualAccount))
+								{
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"Options:APPLY:ActualAccountSO-write wait failed\n");
+									#endif
+									#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"Options:APPLY:ActualBrowserSO-write done\n");
+									#endif
+									WriteDoneSO(POP3Plugin->AccountBrowserSO);
+
+								}
+								#ifdef DEBUG_SYNCHRO
+								DebugLog(SynchroFile,"Options:APPLY:ActualAccountSO-write enter\n");
+								#endif
+				        
+//								Beep(1000,100);Sleep(200);
+								GetDlgItemText(hDlg,IDC_EDITNAME,Text,sizeof(Text)/sizeof(TCHAR));
+								if(!(Length=_tcslen(Text)))
+									break;
+								if(NULL==ActualAccount->Name)
+									ActualAccount->Name=new TCHAR[Length+1];
+								_tcscpy(ActualAccount->Name,Text);
+
+								
+				        
+//								Beep(1000,100);Sleep(200);
+								GetDlgItemText(hDlg,IDC_EDITSERVER,Text,sizeof(Text)/sizeof(TCHAR));
+								if(NULL!=ActualAccount->Server->Name)
+									delete[] ActualAccount->Server->Name;
+								ActualAccount->Server->Name=new TCHAR[_tcslen(Text)+1];
+								_tcscpy(ActualAccount->Server->Name,Text);
+				        
+//								Beep(1000,100);Sleep(200);
+								GetDlgItemText(hDlg,IDC_EDITLOGIN,Text,sizeof(Text)/sizeof(TCHAR));
+								if(NULL!=ActualAccount->Server->Login)
+									delete[] ActualAccount->Server->Login;
+								ActualAccount->Server->Login=new TCHAR[_tcslen(Text)+1];
+								_tcscpy(ActualAccount->Server->Login,Text);
+				        
+//								Beep(1000,100);Sleep(200);
+								GetDlgItemText(hDlg,IDC_EDITPASS,Text,sizeof(Text)/sizeof(TCHAR));
+								if(NULL!=ActualAccount->Server->Passwd)
+									delete[] ActualAccount->Server->Passwd;
+								ActualAccount->Server->Passwd=new TCHAR[_tcslen(Text)+1];
+								_tcscpy(ActualAccount->Server->Passwd,Text);
+				        
+//								Beep(1000,100);Sleep(200);
+								GetDlgItemTextW(hDlg,IDC_EDITAPP,TextW,sizeof(TextW)/sizeof(WCHAR));
+								if(NULL!=ActualAccount->NewMailN.App)
+									delete[] ActualAccount->NewMailN.App;
+								ActualAccount->NewMailN.App=new WCHAR[wcslen(TextW)+1];
+								wcscpy(ActualAccount->NewMailN.App,TextW);
+				        
+//								Beep(1000,100);Sleep(200);
+								GetDlgItemTextW(hDlg,IDC_EDITAPPPARAM,TextW,sizeof(TextW)/sizeof(WCHAR));
+								if(NULL!=ActualAccount->NewMailN.AppParam)
+									delete[] ActualAccount->NewMailN.AppParam;
+								ActualAccount->NewMailN.AppParam=new WCHAR[wcslen(TextW)+1];
+								wcscpy(ActualAccount->NewMailN.AppParam,TextW);
+				        
+								ActualAccount->Server->Port=Port;
+								ActualAccount->Interval=Interval*60;
+								
+//								Beep(1000,100);Sleep(200);
+								if(CB_ERR==(index=SendDlgItemMessage(hDlg,IDC_COMBOCP,CB_GETCURSEL,0,0)))
+									index=CPDEFINDEX;
+								ActualAccount->CP=CodePageNamesSupp[index].CP;
+				        
+//								Beep(1000,100);Sleep(200);
+								if(NewAcc)
+									ActualAccount->TimeLeft=Interval*60;
+				        							
+								CheckStart=(IsDlgButtonChecked(hDlg,IDC_CHECKSTART)==BST_CHECKED);
+								CheckForce=(IsDlgButtonChecked(hDlg,IDC_CHECKFORCE)==BST_CHECKED);
+
+								ActualAccount->Flags=
+									(Check ? YAMN_ACC_ENA : 0) |
+									(CheckSSL ? YAMN_ACC_SSL23 : 0) |
+									(CheckNoTLS ? YAMN_ACC_NOTLS : 0) |
+									(CheckAPOP ? YAMN_ACC_APOP : 0) |
+									(CheckABody ? YAMN_ACC_BODY : 0) |
+									(ActualAccount->Flags & YAMN_ACC_POPN);
+				        
+								ActualAccount->StatusFlags=
+									(Check0 ? YAMN_ACC_ST0 : 0) |
+									(Check1 ? YAMN_ACC_ST1 : 0) |
+									(Check2 ? YAMN_ACC_ST2 : 0) |
+									(Check3 ? YAMN_ACC_ST3 : 0) |
+									(Check4 ? YAMN_ACC_ST4 : 0) |
+									(Check5 ? YAMN_ACC_ST5 : 0) |
+									(Check6 ? YAMN_ACC_ST6 : 0) |
+									(Check7 ? YAMN_ACC_ST7 : 0) |
+									(Check8 ? YAMN_ACC_ST8 : 0) |
+									(Check9 ? YAMN_ACC_ST9 : 0) |
+									(CheckStart ? YAMN_ACC_STARTS : 0) |
+									(CheckForce ? YAMN_ACC_FORCE : 0);
+
+								ActualAccount->NewMailN.Flags=
+									(CheckSnd ? YAMN_ACC_SND : 0) |
+									(CheckMsg ? YAMN_ACC_MSG : 0) |
+									(CheckIco ? YAMN_ACC_ICO : 0) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_POP) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_POPC) |
+									(CheckApp ? YAMN_ACC_APP : 0) |
+									(CheckKBN ? YAMN_ACC_KBN : 0) |
+									(CheckContact ? YAMN_ACC_CONT : 0) |
+									(CheckContactNick ? YAMN_ACC_CONTNICK : 0) |
+									(CheckContactNoEvent ? YAMN_ACC_CONTNOEVENT : 0) |
+									YAMN_ACC_MSGP;			//this is default: when new mail arrives and window was displayed, leave it displayed.
+
+								ActualAccount->NoNewMailN.Flags=
+									(ActualAccount->NoNewMailN.Flags & YAMN_ACC_POP) |
+									(ActualAccount->NoNewMailN.Flags & YAMN_ACC_POPC) |
+									(CheckNMsgP ? YAMN_ACC_MSGP : 0);
+
+								ActualAccount->BadConnectN.Flags=
+									(CheckFSnd ? YAMN_ACC_SND : 0) |
+									(CheckFMsg ? YAMN_ACC_MSG : 0) |
+									(CheckFIco ? YAMN_ACC_ICO : 0) |
+									(ActualAccount->BadConnectN.Flags & YAMN_ACC_POP) |
+									(ActualAccount->BadConnectN.Flags & YAMN_ACC_POPC);
+
+								#ifdef DEBUG_SYNCHRO
+								DebugLog(SynchroFile,"Options:APPLY:ActualAccountSO-write done\n");
+								#endif
+								WriteDone(ActualAccount);
+								#ifdef DEBUG_SYNCHRO                    
+								DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write done\n");
+								#endif                                  
+								WriteDoneSO(POP3Plugin->AccountBrowserSO);
+																
+								EnableWindow(GetDlgItem(hDlg,IDC_BTNDEL),TRUE);
+							
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+
+								
+								index = SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);
+								
+
+								HPOP3ACCOUNT temp = ActualAccount;
+								
+								SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_RESETCONTENT,0,(LPARAM)0);
+								if(POP3Plugin->FirstAccount!=NULL)
+									for(ActualAccount=(HPOP3ACCOUNT)POP3Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=(HPOP3ACCOUNT)ActualAccount->Next)
+										if(ActualAccount->Name!=NULL)
+											SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_ADDSTRING,0,(LPARAM)ActualAccount->Name);
+
+								ActualAccount = temp;
+								SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_SETCURSEL,(WPARAM)index,(LPARAM)ActualAccount->Name);
+
+//								if(0==WritePOP3Accounts())
+//									Beep(500,100);
+								WritePOP3Accounts();
+								RefreshContact();
+								return TRUE;
+							}
+						}
+						break;
+					}
+					break;
+			}
+			break;
+	}
+	if(Changed)
+		SendMessage(GetParent(hDlg),PSM_CHANGED,0,0);
+	return FALSE;
+}
+
+INT_PTR CALLBACK DlgProcPOP3AccPopup(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+	BOOL Changed=FALSE;
+	static BOOL InList=FALSE;
+	static HPOP3ACCOUNT ActualAccount;
+	static UCHAR ActualStatus;
+//	static struct CPOP3Options POP3Options;
+
+	switch(msg)
+	{
+		case WM_INITDIALOG:
+		{
+			DlgEnableAccountPopup(hDlg,(WPARAM)FALSE,(LPARAM)FALSE);
+			DlgShowAccountPopup(hDlg,(WPARAM)M_SHOWDEFAULT,0);
+			//DlgShowAccountColors(hDlg,0,(LPARAM)ActualAccount);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"Options:INITDIALOG:AccountBrowserSO-read wait\n");
+			#endif
+			WaitToReadSO(POP3Plugin->AccountBrowserSO);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"Options:INITDIALOG:AccountBrowserSO-read enter\n");
+			#endif
+			if(POP3Plugin->FirstAccount!=NULL)
+				for(ActualAccount=(HPOP3ACCOUNT)POP3Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=(HPOP3ACCOUNT)ActualAccount->Next)
+					if(ActualAccount->Name!=NULL)
+						SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_ADDSTRING,0,(LPARAM)ActualAccount->Name);
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"Options:INITDIALOG:AccountBrowserSO-read done\n");
+			#endif
+			ReadDoneSO(POP3Plugin->AccountBrowserSO);
+			ActualAccount=NULL;
+
+			
+			TranslateDialogDefault(hDlg);
+			SendMessage(GetParent(hDlg),PSM_UNCHANGED,(WPARAM)hDlg,0);
+			return TRUE;
+		}
+
+		case WM_SHOWWINDOW:
+			if((BOOL)wParam==FALSE)
+			{
+				WindowList_Remove(pYAMNVar->MessageWnds,hDlg);
+				SendMessage(GetParent(hDlg),PSM_UNCHANGED,(WPARAM)hDlg,(LPARAM)0);
+			}
+			else
+			{
+				WindowList_Add(pYAMNVar->MessageWnds,hDlg,NULL);
+
+				int index = SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETCURSEL,(WPARAM)0,(LPARAM)0);
+				HPOP3ACCOUNT temp = ActualAccount;
+				SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_RESETCONTENT,0,(LPARAM)0);
+
+				if(POP3Plugin->FirstAccount!=NULL)
+					for(ActualAccount=(HPOP3ACCOUNT)POP3Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=(HPOP3ACCOUNT)ActualAccount->Next)
+						if(ActualAccount->Name!=NULL)
+							SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_ADDSTRING,0,(LPARAM)ActualAccount->Name);
+				
+				ActualAccount = temp;
+				
+				if(ActualAccount != NULL)
+				{
+					SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_SETCURSEL,(WPARAM)index,(LPARAM)ActualAccount->Name);
+					DlgShowAccount(hDlg,(WPARAM)M_SHOWACTUAL,(LPARAM)ActualAccount);
+					DlgShowAccountColors(hDlg,0,(LPARAM)ActualAccount);
+					DlgEnableAccountPopup(hDlg,(WPARAM)TRUE,(LPARAM)FALSE);
+				}
+				else
+				{
+					DlgShowAccountPopup(hDlg,(WPARAM)M_SHOWDEFAULT,0);
+					DlgEnableAccountPopup(hDlg,(WPARAM)FALSE,(LPARAM)FALSE);
+				}
+
+			}
+			return TRUE;
+		
+		case WM_COMMAND:
+		{
+			WORD wNotifyCode = HIWORD(wParam);
+			switch(LOWORD(wParam))
+			{
+				LONG Result;
+				case IDC_COMBOACCOUNT:
+					switch(wNotifyCode)
+					{
+
+						case CBN_KILLFOCUS:
+							GetDlgItemText(hDlg,IDC_COMBOACCOUNT,DlgInput,sizeof(DlgInput)/sizeof(TCHAR));
+							if(NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)DlgInput)))
+							{
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+								if(lstrlen(DlgInput))
+									DlgEnableAccountPopup(hDlg,(WPARAM)TRUE,(LPARAM)TRUE);
+								else
+									DlgEnableAccountPopup(hDlg,(WPARAM)FALSE,(LPARAM)FALSE);
+							}
+							else
+							{
+								DlgShowAccount(hDlg,(WPARAM)M_SHOWACTUAL,(LPARAM)ActualAccount);
+								DlgShowAccountColors(hDlg,0,(LPARAM)ActualAccount);
+								DlgEnableAccountPopup(hDlg,(WPARAM)TRUE,(LPARAM)TRUE);
+							}
+							break;
+						case CBN_SELCHANGE:
+							if(CB_ERR!=(Result=SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETCURSEL,0,0)))
+								SendDlgItemMessage(hDlg,IDC_COMBOACCOUNT,CB_GETLBTEXT,(WPARAM)Result,(LPARAM)DlgInput);
+							if((Result==CB_ERR) || (NULL==(ActualAccount=(HPOP3ACCOUNT)CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)DlgInput))))
+							{
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)NULL);
+							}
+							else
+							{
+								DlgShowAccount(hDlg,(WPARAM)M_SHOWACTUAL,(LPARAM)ActualAccount);
+								DlgShowAccountColors(hDlg,0,(LPARAM)ActualAccount);
+								DlgEnableAccountPopup(hDlg,(WPARAM)TRUE,(LPARAM)FALSE);
+							}
+							break;
+					}
+					break;
+				case IDC_COMBOCP:
+					{
+						int sel = SendDlgItemMessage(hDlg,IDC_COMBOCP,CB_GETCURSEL,0,0);
+						CPINFOEX info; GetCPInfoEx(CodePageNamesSupp[sel].CP,0,&info);
+						DlgSetItemText(hDlg,(WPARAM)IDC_STSTATUS,(LPARAM)info.CodePageName);
+					}
+				case IDC_RADIOPOPN:
+				case IDC_RADIOPOP1:
+					Changed=TRUE;
+					break;
+				case IDC_CPB:
+				case IDC_CPT:
+				case IDC_CPFB:
+				case IDC_CPFT:
+				case IDC_CPNB:
+				case IDC_CPNT:
+					if(HIWORD(wParam)!=CPN_COLOURCHANGED)
+						break;
+				case IDC_CHECKCOL:
+				case IDC_CHECKFCOL:
+				case IDC_CHECKNCOL:
+					EnableWindow(GetDlgItem(hDlg,IDC_CPB),(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPT),(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED) && wParam);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPNB),(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED) && wParam);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPNT),(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED) && wParam);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPFB),(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED) && wParam);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPFT),(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED) && (IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED) && wParam);
+					Changed=TRUE;
+					break;
+				
+				case IDC_PREVIEW:
+				{
+					POPUPDATA Tester;
+					POPUPDATA TesterF;
+					POPUPDATA TesterN;
+					BOOL TesterC=(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED);
+					BOOL TesterFC=(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED);
+					BOOL TesterNC=(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED);
+					
+					ZeroMemory(&Tester,sizeof(Tester));
+					ZeroMemory(&TesterF,sizeof(TesterF));
+					ZeroMemory(&TesterF,sizeof(TesterN));
+					Tester.lchContact=NULL;
+					TesterF.lchContact=NULL;
+					TesterN.lchContact=NULL;
+					Tester.lchIcon=hYamnIcons[2];
+					TesterF.lchIcon=hYamnIcons[3];
+					TesterN.lchIcon=hYamnIcons[1];
+
+					lstrcpy(Tester.lpzContactName,Translate("Account Test"));
+					lstrcpy(TesterF.lpzContactName,Translate("Account Test (failed)"));
+					lstrcpy(TesterN.lpzContactName,Translate("Account Test"));
+					lstrcpy(Tester.lpzText,Translate("You have N new mail messages"));
+					lstrcpy(TesterF.lpzText,Translate("Connection failed message"));
+					lstrcpy(TesterN.lpzText,Translate("No new mail message"));
+					if(TesterC)
+					{
+						Tester.colorBack=SendDlgItemMessage(hDlg,IDC_CPB,CPM_GETCOLOUR,0,0);
+						Tester.colorText=SendDlgItemMessage(hDlg,IDC_CPT,CPM_GETCOLOUR,0,0);
+					}
+					else
+					{
+						Tester.colorBack=GetSysColor(COLOR_BTNFACE);
+						Tester.colorText=GetSysColor(COLOR_WINDOWTEXT);
+					}
+					if(TesterFC)
+					{
+						TesterF.colorBack=SendDlgItemMessage(hDlg,IDC_CPFB,CPM_GETCOLOUR,0,0);
+						TesterF.colorText=SendDlgItemMessage(hDlg,IDC_CPFT,CPM_GETCOLOUR,0,0);
+					}
+					else
+					{
+						TesterF.colorBack=GetSysColor(COLOR_BTNFACE);
+						TesterF.colorText=GetSysColor(COLOR_WINDOWTEXT);
+					}
+					if(TesterNC)
+					{
+						TesterN.colorBack=SendDlgItemMessage(hDlg,IDC_CPNB,CPM_GETCOLOUR,0,0);
+						TesterN.colorText=SendDlgItemMessage(hDlg,IDC_CPNT,CPM_GETCOLOUR,0,0);
+					}
+					else
+					{
+						TesterN.colorBack=GetSysColor(COLOR_BTNFACE);
+						TesterN.colorText=GetSysColor(COLOR_WINDOWTEXT);
+					}
+					Tester.PluginWindowProc=(WNDPROC)NULL;
+					TesterF.PluginWindowProc=(WNDPROC)NULL;
+					TesterN.PluginWindowProc=(WNDPROC)NULL;
+					Tester.PluginData=NULL;	
+					TesterF.PluginData=NULL;
+					TesterN.PluginData=NULL;
+
+					if(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED)
+						CallService(MS_POPUP_ADDPOPUP,(WPARAM)&Tester,0);
+					if(IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED)
+						CallService(MS_POPUP_ADDPOPUP,(WPARAM)&TesterF,0);
+					if(IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED)
+						CallService(MS_POPUP_ADDPOPUP,(WPARAM)&TesterN,0);
+					Changed=TRUE;
+				}
+					break;
+				case IDC_CHECKKBN:
+					Changed=TRUE;
+					break;
+				case IDC_CHECKPOP:
+					Changed=TRUE;
+					EnableWindow(GetDlgItem(hDlg,IDC_CHECKCOL),IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPB),(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED) && IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPT),(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED) && IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_RADIOPOPN),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED));
+					EnableWindow(GetDlgItem(hDlg,IDC_RADIOPOP1),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED));
+					EnableWindow(GetDlgItem(hDlg,IDC_EDITPOPS),(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED));
+					break;
+				case IDC_CHECKFPOP:
+					Changed=TRUE;
+					EnableWindow(GetDlgItem(hDlg,IDC_CHECKFCOL),IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPFB),(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED) && IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPFT),(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED) && IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_EDITFPOPS),(IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED));
+					break;
+				case IDC_CHECKNPOP:
+					Changed=TRUE;
+					EnableWindow(GetDlgItem(hDlg,IDC_CHECKNCOL),IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPNB),(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED) && IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_CPNT),(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED) && IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED);
+					EnableWindow(GetDlgItem(hDlg,IDC_EDITNPOPS),(IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED));
+					break;
+				
+ 			}
+			if(HIWORD(wParam)==EN_CHANGE)
+				Changed=TRUE;
+			break;
+		}
+		case WM_NOTIFY:
+			switch(((LPNMHDR)lParam)->idFrom)
+			{
+				case 0:
+					switch(((LPNMHDR)lParam)->code)
+					{
+						case PSN_APPLY:
+						{
+							TCHAR Text[MAX_PATH];
+							BOOL Translated,NewAcc=FALSE,CheckPopup,CheckPopupW;
+							BOOL CheckNPopup,CheckNPopupW,CheckFPopup,CheckFPopupW;
+							BOOL CheckPopN;
+							UINT Time,TimeN,TimeF;
+
+							if(GetDlgItemText(hDlg,IDC_COMBOACCOUNT,Text,sizeof(Text)/sizeof(TCHAR)))
+							{
+								CheckPopup=(IsDlgButtonChecked(hDlg,IDC_CHECKPOP)==BST_CHECKED);
+								CheckPopupW=(IsDlgButtonChecked(hDlg,IDC_CHECKCOL)==BST_CHECKED);
+								
+								CheckFPopup=(IsDlgButtonChecked(hDlg,IDC_CHECKFPOP)==BST_CHECKED);
+								CheckFPopupW=(IsDlgButtonChecked(hDlg,IDC_CHECKFCOL)==BST_CHECKED);
+
+								CheckNPopup=(IsDlgButtonChecked(hDlg,IDC_CHECKNPOP)==BST_CHECKED);
+								CheckNPopupW=(IsDlgButtonChecked(hDlg,IDC_CHECKNCOL)==BST_CHECKED);
+
+								CheckPopN=(IsDlgButtonChecked(hDlg,IDC_RADIOPOPN)==BST_CHECKED);
+								
+								
+								Time=GetDlgItemInt(hDlg,IDC_EDITPOPS,&Translated,FALSE);
+								if(!Translated)
+								{
+									MessageBox(hDlg,Translate("This is not a valid number value"),Translate("Input error"),MB_OK);
+									SetFocus(GetDlgItem(hDlg,IDC_EDITPOPS));
+								        break;
+								}
+								TimeN=GetDlgItemInt(hDlg,IDC_EDITNPOPS,&Translated,FALSE);
+								if(!Translated)
+								{
+									MessageBox(hDlg,Translate("This is not a valid number value"),Translate("Input error"),MB_OK);
+									SetFocus(GetDlgItem(hDlg,IDC_EDITNPOPS));
+								        break;
+								}
+								TimeF=GetDlgItemInt(hDlg,IDC_EDITFPOPS,&Translated,FALSE);
+								if(!Translated)
+								{
+									MessageBox(hDlg,Translate("This is not a valid number value"),Translate("Input error"),MB_OK);
+									SetFocus(GetDlgItem(hDlg,IDC_EDITFPOPS));
+								        break;
+								}
+				       
+				        
+								DlgSetItemText(hDlg,(WPARAM)IDC_STTIMELEFT,(LPARAM)Translate("Please wait while no account is in use."));
+								
+								ActualAccount->Flags=
+									(ActualAccount->Flags & YAMN_ACC_ENA) |
+									(ActualAccount->Flags & YAMN_ACC_SSL23) |
+									(ActualAccount->Flags & YAMN_ACC_NOTLS) |
+									(ActualAccount->Flags & YAMN_ACC_APOP) |
+									(ActualAccount->Flags & YAMN_ACC_BODY) |
+									(CheckPopN ? YAMN_ACC_POPN : 0);
+				        	        
+								ActualAccount->NewMailN.Flags=
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_SND) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_MSG) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_ICO) |
+									(CheckPopup ? YAMN_ACC_POP : 0) |
+									(CheckPopupW ? YAMN_ACC_POPC : 0) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_APP) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_KBN) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_CONT) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_CONTNICK) |
+									(ActualAccount->NewMailN.Flags & YAMN_ACC_CONTNOEVENT) |
+									YAMN_ACC_MSGP;
+
+								ActualAccount->NoNewMailN.Flags=
+									(CheckNPopup ? YAMN_ACC_POP : 0) |
+									(CheckNPopupW ? YAMN_ACC_POPC : 0) |
+									(ActualAccount->NoNewMailN.Flags & YAMN_ACC_MSGP);
+
+								ActualAccount->BadConnectN.Flags=
+									(ActualAccount->BadConnectN.Flags & YAMN_ACC_SND) |
+									(ActualAccount->BadConnectN.Flags & YAMN_ACC_MSG) |
+									(ActualAccount->BadConnectN.Flags & YAMN_ACC_ICO) |
+									(CheckFPopup ? YAMN_ACC_POP : 0) |
+									(CheckFPopupW ? YAMN_ACC_POPC : 0);
+				        
+								ActualAccount->NewMailN.PopUpB=SendDlgItemMessage(hDlg,IDC_CPB,CPM_GETCOLOUR,0,0);
+								ActualAccount->NewMailN.PopUpT=SendDlgItemMessage(hDlg,IDC_CPT,CPM_GETCOLOUR,0,0);
+								ActualAccount->NewMailN.PopUpTime=Time;
+				        
+								ActualAccount->NoNewMailN.PopUpB=SendDlgItemMessage(hDlg,IDC_CPNB,CPM_GETCOLOUR,0,0);
+								ActualAccount->NoNewMailN.PopUpT=SendDlgItemMessage(hDlg,IDC_CPNT,CPM_GETCOLOUR,0,0);
+								ActualAccount->NoNewMailN.PopUpTime=TimeN;
+								
+								ActualAccount->BadConnectN.PopUpB=SendDlgItemMessage(hDlg,IDC_CPFB,CPM_GETCOLOUR,0,0);
+								ActualAccount->BadConnectN.PopUpT=SendDlgItemMessage(hDlg,IDC_CPFT,CPM_GETCOLOUR,0,0);
+								ActualAccount->BadConnectN.PopUpTime=TimeF;
+								
+												        
+
+								#ifdef DEBUG_SYNCHRO
+								DebugLog(SynchroFile,"Options:APPLY:ActualAccountSO-write done\n");
+								#endif
+								WriteDone(ActualAccount);
+								#ifdef DEBUG_SYNCHRO                    
+								DebugLog(SynchroFile,"Options:APPLY:AccountBrowserSO-write done\n");
+								#endif                                  
+								WriteDoneSO(POP3Plugin->AccountBrowserSO);
+
+//								if(0==WritePOP3Accounts())
+//									Beep(500,100);
+								WritePOP3Accounts();
+								RefreshContact();
+								return TRUE;
+							}
+						}
+						break;
+					}
+					break;
+			}
+			break;
+	}
+	if(Changed)
+		SendMessage(GetParent(hDlg),PSM_CHANGED,0,0);
+	return FALSE;
+}
+
diff --git a/plugins/YAMN/proto/pop3/pop3opt.h b/plugins/YAMN/proto/pop3/pop3opt.h
new file mode 100644
index 0000000000..291ff03efd
--- /dev/null
+++ b/plugins/YAMN/proto/pop3/pop3opt.h
@@ -0,0 +1,38 @@
+#ifndef __OPTIONS_H
+#define __OPTIONS_H
+
+#define M_SHOWACTUAL	0
+#define M_SHOWDEFAULT	1
+
+
+//Enables account in options
+BOOL DlgEnableAccount(HWND hDlg,WPARAM wParam,LPARAM lParam);
+
+//Sets dialog controls to match current account
+BOOL DlgShowAccount(HWND hDlg,WPARAM wParam,LPARAM lParam);
+
+//Sets colors to match colors of actual account 
+BOOL DlgShowAccountColors(HWND hDlg,WPARAM wParam,LPARAM lParam);
+
+//Sets dialog item text
+BOOL DlgSetItemText(HWND hDlg,WPARAM wParam,LPARAM lParam);
+
+//Sets dialog item text in Unicode
+BOOL DlgSetItemTextW(HWND hDlg,WPARAM wParam,LPARAM lParam);
+
+//Options dialog procedure
+INT_PTR CALLBACK DlgProcPOP3AccOpt(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+//Options dialog procedure
+BOOL CALLBACK DlgProcPOP3AccStatusOpt(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+//Options dialog procedure
+INT_PTR CALLBACK DlgProcYAMNOpt(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+//Options dialog procedure
+INT_PTR CALLBACK DlgProcPOP3AccPopup(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+
+//Initializes POP3 options for Miranda
+int POP3OptInit(WPARAM wParam,LPARAM lParam);
+
+#endif
diff --git a/plugins/YAMN/protoplugin.cpp b/plugins/YAMN/protoplugin.cpp
new file mode 100644
index 0000000000..e89b8790ab
--- /dev/null
+++ b/plugins/YAMN/protoplugin.cpp
@@ -0,0 +1,258 @@
+/*
+ * YAMN plugin export functions for protocols
+ *
+ * (c) majvan 2002-2004
+ */
+
+#if !defined(_WIN64)
+	#include "filter/simple/AggressiveOptimize.h"
+#endif
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+#include <newpluginapi.h>
+#include <m_database.h>
+#include "m_yamn.h"
+#include "m_protoplugin.h"
+#include "m_synchro.h"
+#include "debug.h"
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+extern WCHAR *UserDirectory;		//e.g. "F:\WINNT\Profiles\UserXYZ"
+extern WCHAR *ProfileName;		//e.g. "majvan"
+extern SWMRG *AccountBrowserSO;
+extern LPCRITICAL_SECTION PluginRegCS;
+extern YAMN_VARIABLES YAMNVar;
+//From synchro.cpp
+extern BOOL WINAPI SWMRGInitialize(PSWMRG,TCHAR *);
+extern void WINAPI SWMRGDelete(PSWMRG);
+extern DWORD WINAPI SWMRGWaitToWrite(PSWMRG pSWMRG,DWORD dwTimeout);
+extern void WINAPI SWMRGDoneWriting(PSWMRG pSWMRG);
+extern DWORD WINAPI SWMRGWaitToRead(PSWMRG pSWMRG, DWORD dwTimeout);
+extern void WINAPI SWMRGDoneReading(PSWMRG pSWMRG);
+//From account.cpp
+extern int StopAccounts(HYAMNPROTOPLUGIN Plugin);
+extern int DeleteAccounts(HYAMNPROTOPLUGIN Plugin);
+extern int WaitForAllAccounts(HYAMNPROTOPLUGIN Plugin,BOOL GetAccountBrowserAccess);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+WCHAR FileName2[]=L"%s\\yamn-accounts.%s.%s.book";		//UserDirectory\\yamn-accounts.PluginName.UserProfileName.book
+PYAMN_PROTOPLUGINQUEUE FirstProtoPlugin=NULL;
+
+INT_PTR RegisterProtocolPluginSvc(WPARAM,LPARAM);
+
+//Removes plugin from queue and deletes registration structures
+INT_PTR UnregisterProtocolPlugin(HYAMNPROTOPLUGIN Plugin);
+
+INT_PTR UnregisterProtocolPluginSvc(WPARAM,LPARAM);
+
+//Removes plugins from queue and deletes registration structures
+INT_PTR UnregisterProtoPlugins();
+
+//Sets imported functions for an plugin and therefore it starts plugin to be registered and running
+// Plugin- plugin, which wants to set its functions
+// YAMNFcn- pointer to imported functions with accounts
+// YAMNFcnVer- version of YAMN_PROTOIMPORTFCN, use YAMN_PROTOIMPORTFCNVERSION
+// YAMNMailFcn- pointer to imported functions with mails
+// YAMNMailFcnVer- version of YAMN_MAILIMPORTFCN, use YAMN_MAILIMPORTFCNVERSION
+// returns nonzero if success
+int WINAPI SetProtocolPluginFcnImportFcn(HYAMNPROTOPLUGIN Plugin,PYAMN_PROTOIMPORTFCN YAMNFcn,DWORD YAMNFcnVer,PYAMN_MAILIMPORTFCN YAMNMailFcn,DWORD YAMNMailFcnVer);
+
+INT_PTR GetFileNameWSvc(WPARAM,LPARAM);
+INT_PTR GetFileNameASvc(WPARAM,LPARAM);
+INT_PTR DeleteFileNameSvc(WPARAM,LPARAM);
+
+struct CExportedFunctions ProtoPluginExportedFcn[]=
+{
+	{YAMN_SETPROTOCOLPLUGINFCNIMPORTID,(void *)SetProtocolPluginFcnImportFcn},
+};
+
+struct CExportedServices ProtoPluginExportedSvc[]=
+{
+	{MS_YAMN_REGISTERPROTOPLUGIN,RegisterProtocolPluginSvc},
+	{MS_YAMN_UNREGISTERPROTOPLUGIN,UnregisterProtocolPluginSvc},
+	{MS_YAMN_GETFILENAMEA,GetFileNameASvc},
+	{MS_YAMN_GETFILENAMEW,GetFileNameWSvc},
+	{MS_YAMN_DELETEFILENAME,DeleteFileNameSvc},
+};
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+INT_PTR RegisterProtocolPluginSvc(WPARAM wParam,LPARAM lParam)
+{
+	PYAMN_PROTOREGISTRATION Registration=(PYAMN_PROTOREGISTRATION)wParam;
+	HYAMNPROTOPLUGIN Plugin;
+
+	if(lParam!=YAMN_PROTOREGISTRATIONVERSION)
+		return 0;
+	if((Registration->Name==NULL) || (Registration->Ver==NULL))
+		return (INT_PTR)NULL;
+	if(NULL==(Plugin=new YAMN_PROTOPLUGIN))
+		return (INT_PTR)NULL;
+
+	Plugin->PluginInfo=Registration;
+
+	Plugin->FirstAccount=NULL;
+
+	Plugin->AccountBrowserSO=new SWMRG;
+	SWMRGInitialize(Plugin->AccountBrowserSO,NULL);
+
+	Plugin->Fcn=NULL;
+	Plugin->MailFcn=NULL;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"::: YAMN- new protocol registered: %0x (%s) :::\n",Plugin,Registration->Name);
+#endif
+	return (INT_PTR)Plugin;
+}
+
+int WINAPI SetProtocolPluginFcnImportFcn(HYAMNPROTOPLUGIN Plugin,PYAMN_PROTOIMPORTFCN YAMNFcn,DWORD YAMNFcnVer,PYAMN_MAILIMPORTFCN YAMNMailFcn,DWORD YAMNMailFcnVer)
+{
+	PYAMN_PROTOPLUGINQUEUE Parser;
+
+	if(YAMNFcnVer!=YAMN_PROTOIMPORTFCNVERSION)
+		return 0;
+	if(YAMNMailFcnVer!=YAMN_MAILIMPORTFCNVERSION)
+		return 0;
+	if(YAMNFcn==NULL)
+		return 0;
+	if(YAMNMailFcn==NULL)
+		return 0;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"::: YAMN- protocol %0x import succeed :::\n",Plugin);
+#endif
+	Plugin->Fcn=YAMNFcn;
+	Plugin->MailFcn=YAMNMailFcn;
+
+	EnterCriticalSection(PluginRegCS);
+//We add protocol to the protocol list
+	for(Parser=FirstProtoPlugin;Parser!=NULL && Parser->Next!=NULL;Parser=Parser->Next);
+	if(Parser==NULL)
+	{
+		FirstProtoPlugin=new YAMN_PROTOPLUGINQUEUE;
+		Parser=FirstProtoPlugin;
+	}
+	else
+	{
+		Parser->Next=new YAMN_PROTOPLUGINQUEUE;
+		Parser=Parser->Next;
+	}
+
+	Parser->Plugin=Plugin;
+	Parser->Next=NULL;
+
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+}
+
+INT_PTR UnregisterProtocolPlugin(HYAMNPROTOPLUGIN Plugin)
+{
+	PYAMN_PROTOPLUGINQUEUE Parser,Found;
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"Entering UnregisterProtocolPlugin\n");
+#endif
+	if(FirstProtoPlugin->Plugin==Plugin)
+	{
+		Found=FirstProtoPlugin;
+		FirstProtoPlugin=FirstProtoPlugin->Next;
+	}
+	else
+	{
+		for(Parser=FirstProtoPlugin;(Parser->Next!=NULL) && (Plugin!=Parser->Next->Plugin);Parser=Parser->Next);
+		if(Parser->Next!=NULL)
+		{
+			Found=Parser->Next;
+			Parser->Next=Parser->Next->Next;
+		}
+		else
+			Found=NULL;
+	}
+	if(Found!=NULL)
+	{
+		StopAccounts(Plugin);
+		DeleteAccounts(Plugin);
+		if(Plugin->Fcn->UnLoadFcn!=NULL)
+			Plugin->Fcn->UnLoadFcn((void *)0);
+		
+		delete Found->Plugin->AccountBrowserSO;
+		delete Found->Plugin;
+		delete Found;
+
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"::: YAMN- protocol %0x unregistered :::\n",Plugin);
+#endif
+	}
+	else
+		return 0;
+	return 1;
+}
+
+INT_PTR UnregisterProtocolPluginSvc(WPARAM wParam,LPARAM lParam)
+{
+	HYAMNPROTOPLUGIN Plugin=(HYAMNPROTOPLUGIN)wParam;
+
+	EnterCriticalSection(PluginRegCS);
+	UnregisterProtocolPlugin(Plugin);
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+
+}
+
+INT_PTR UnregisterProtoPlugins()
+{
+	EnterCriticalSection(PluginRegCS);
+//We remove protocols from the protocol list
+	while(FirstProtoPlugin!=NULL)
+		UnregisterProtocolPlugin(FirstProtoPlugin->Plugin);
+	LeaveCriticalSection(PluginRegCS);
+	return 1;
+}
+
+INT_PTR GetFileNameWSvc(WPARAM wParam,LPARAM)
+{
+	WCHAR *FileName;
+
+	if(NULL==(FileName=new WCHAR[MAX_PATH]))
+		return NULL;
+	swprintf(FileName,FileName2,UserDirectory,(WCHAR *)wParam,ProfileName);
+//	MessageBoxW(NULL,FileName,L"GetFileNameW",MB_OK);
+	return (INT_PTR)FileName;
+}
+
+INT_PTR GetFileNameASvc(WPARAM wParam,LPARAM)
+{
+	WCHAR *ConvertedInput;
+	WCHAR *FileName;
+
+	if(NULL==(FileName=new WCHAR[MAX_PATH]))
+		return NULL;
+	if(NULL==(ConvertedInput=new WCHAR[MAX_PATH]))
+	{
+		delete[] FileName;
+		return NULL;
+	}
+
+// Convert input string to unicode
+	MultiByteToWideChar(CP_ACP,MB_USEGLYPHCHARS,(char *)wParam,-1,ConvertedInput,(int)strlen((char *)wParam)+1);
+
+	swprintf(FileName,FileName2,UserDirectory,ConvertedInput,ProfileName);
+//	MessageBoxW(NULL,FileName,L"GetFileNameA",MB_OK);
+	delete[] ConvertedInput;
+
+	return (INT_PTR)FileName;
+}
+
+INT_PTR DeleteFileNameSvc(WPARAM wParam,LPARAM)
+{
+	if((WCHAR *)wParam!=NULL)
+		delete[] (WCHAR *)wParam;
+
+	return 0;
+}
diff --git a/plugins/YAMN/resources/YAMN.rc b/plugins/YAMN/resources/YAMN.rc
new file mode 100644
index 0000000000..9269bf89ce
--- /dev/null
+++ b/plugins/YAMN/resources/YAMN.rc
@@ -0,0 +1,383 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO 
+BEGIN
+    IDD_DLGVIEWMESSAGES, DIALOG
+    BEGIN
+        LEFTMARGIN, 5
+        RIGHTMARGIN, 455
+        TOPMARGIN, 5
+        BOTTOMMARGIN, 105
+    END
+
+    IDD_DLGBADCONNECT, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 179
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 43
+    END
+
+    IDD_PLUGINOPT, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 312
+        VERTGUIDE, 13
+        VERTGUIDE, 85
+        VERTGUIDE, 160
+        VERTGUIDE, 307
+        TOPMARGIN, 4
+        HORZGUIDE, 5
+        HORZGUIDE, 20
+        HORZGUIDE, 147
+        HORZGUIDE, 157
+        HORZGUIDE, 173
+        HORZGUIDE, 184
+        HORZGUIDE, 207
+        HORZGUIDE, 217
+    END
+
+    IDD_POP3ACCOUNTOPT, DIALOG
+    BEGIN
+        VERTGUIDE, 155
+        VERTGUIDE, 236
+    END
+
+    IDD_CHOOSESTATUSMODES, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 219
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 147
+    END
+
+    IDD_YAMNOPT, DIALOG
+    BEGIN
+        VERTGUIDE, 8
+    END
+
+    IDD_POP3ACCOUNTPOPUP, DIALOG
+    BEGIN
+        VERTGUIDE, 155
+        VERTGUIDE, 236
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_DLGVIEWMESSAGES DIALOG  50, 200, 460, 110
+STYLE DS_SETFONT | DS_3DLOOK | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+FONT 8, "MS Shell Dlg"
+BEGIN
+    CONTROL         "List4",IDC_LISTMAILS,"SysListView32",LVS_REPORT | LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,5,5,450,70
+    DEFPUSHBUTTON   "",IDC_BTNOK,395,90,60,15
+    PUSHBUTTON      "",IDC_BTNAPP,263,90,114,15
+    PUSHBUTTON      "",IDC_BTNDEL,5,90,114,15
+    LTEXT           "",IDC_STSTATUS,5,75,450,10
+    PUSHBUTTON      "",IDC_BTNCHECKALL,150,91,92,14
+END
+
+IDD_DLGSHOWMESSAGE DIALOGEX 50, 200, 460, 132
+STYLE DS_SETFONT | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    CONTROL         "List5",IDC_LISTHEADERS,"SysListView32",LVS_REPORT | LVS_EDITLABELS | WS_BORDER | WS_TABSTOP,5,5,450,70
+    CONTROL         "",IDC_SPLITTER,"Static",SS_ENHMETAFILE | WS_TABSTOP,0,80,187,2,WS_EX_STATICEDGE
+    EDITTEXT        IDC_EDITBODY,3,84,454,45,ES_MULTILINE | ES_READONLY | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL
+END
+
+IDD_DLGBADCONNECT DIALOG  0, 0, 186, 76
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+FONT 8, "MS Shell Dlg"
+BEGIN
+    DEFPUSHBUTTON   "OK",IDC_BTNOK,69,55,50,14
+    LTEXT           "",IDC_STATICMSG,7,7,172,37
+END
+
+IDD_PLUGINOPT DIALOGEX 0, 0, 310, 231
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_BORDER
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    GROUPBOX        "Installed plugins",IDC_STATIC,7,5,300,142
+    COMBOBOX        IDC_COMBOPLUGINS,13,14,287,58,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Version:",IDC_STATIC,13,30,72,11
+    EDITTEXT        IDC_STVER,85,30,215,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_GROUP
+    LTEXT           "Description:",IDC_STATIC,13,41,72,23
+    EDITTEXT        IDC_STDESC,85,41,215,23,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_GROUP
+    LTEXT           "Copyright:",IDC_STATIC,13,64,72,10
+    EDITTEXT        IDC_STCOPY,85,63,215,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_GROUP
+    LTEXT           "Contact:",IDC_STATIC,13,77,72,11
+    EDITTEXT        IDC_STMAIL,85,76,214,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | WS_GROUP
+    LTEXT           "WWW:",IDC_STATIC,13,101,72,11
+    CONTROL         "",IDC_STWWW,"Hyperlink",WS_TABSTOP,85,101,215,11
+END
+
+IDD_POP3ACCOUNTOPT DIALOGEX 0, 0, 310, 230
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    COMBOBOX        IDC_COMBOACCOUNT,4,6,106,65,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    CONTROL         "Check this account",IDC_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,167,32,118,10,WS_EX_TRANSPARENT
+    LTEXT           "Check interval [min]:",IDC_STINTERVAL,168,56,94,8
+    EDITTEXT        IDC_EDITINTERVAL,259,53,20,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_TRANSPARENT
+    GROUPBOX        "Notifications",IDC_GBNEWMAIL,4,143,304,87
+    CONTROL         "Sound",IDC_CHECKSND,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,12,162,60,10
+    CONTROL         "Message",IDC_CHECKMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,174,135,10
+    CONTROL         "Tray Icon",IDC_CHECKICO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,85,163,65,10
+    CONTROL         "Keyboard Flash",IDC_CHECKKBN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,186,132,9
+    CONTROL         "Execute Application",IDC_CHECKAPP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,198,135,8
+    PUSHBUTTON      "...",IDC_BTNAPP,19,209,16,12
+    EDITTEXT        IDC_EDITAPP,41,209,65,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDITAPPPARAM,111,209,40,12,ES_AUTOHSCROLL
+    CONTROL         "Use contact notification for this account",IDC_CHECKCONTACT,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,166,107,138,10,WS_EX_TRANSPARENT
+    CONTROL         "Replace nick name",IDC_CHECKCONTACTNICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,117,117,10,WS_EX_TRANSPARENT
+    CONTROL         "Disable Events",IDC_CHECKCONTACTNOEVENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,128,115,10,WS_EX_TRANSPARENT
+    LTEXT           "",IDC_STSTATUS,218,9,88,8
+    LTEXT           "Server:",IDC_STSERVER,10,50,44,8
+    EDITTEXT        IDC_EDITSERVER,56,48,92,12,ES_AUTOHSCROLL | WS_GROUP
+    LTEXT           "User Name:",IDC_STLOGIN,10,82,44,8
+    EDITTEXT        IDC_EDITLOGIN,57,80,92,12,ES_AUTOHSCROLL | WS_GROUP
+    LTEXT           "Password:",IDC_STPASS,10,96,44,8
+    EDITTEXT        IDC_EDITPASS,57,94,92,12,ES_PASSWORD | ES_AUTOHSCROLL | WS_GROUP
+    LTEXT           "Codepage:",IDC_STCP,10,111,44,8
+    COMBOBOX        IDC_COMBOCP,57,108,92,130,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Port:",IDC_STPORT,10,65,44,8,SS_CENTERIMAGE
+    EDITTEXT        IDC_EDITPORT,57,64,27,12,ES_AUTOHSCROLL | ES_NUMBER | WS_GROUP
+    CONTROL         "SSL",IDC_CHECKSSL,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,87,66,27,10
+    CONTROL         "Disable STLS",IDC_CHECKNOTLS,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_TABSTOP,83,125,69,10
+    CONTROL         "Startup check",IDC_CHECKSTART,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,167,43,78,10
+    CONTROL         "Auto retrieve body",IDC_AUTOBODY,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,166,86,137,10
+    CONTROL         "Check from menu",IDC_CHECKFORCE,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,166,97,137,8
+    PUSHBUTTON      "Only check when ...",IDC_BTNSTATUS,195,69,81,13
+    CONTROL         "Sound notification if failed",IDC_CHECKFSND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,166,163,135,10
+    CONTROL         "Message notification if failed",IDC_CHECKFMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,166,174,135,10
+    CONTROL         "Tray icon notification if failed",IDC_CHECKFICO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,166,186,135,10
+    PUSHBUTTON      "Reset counter",IDC_BTNRESET,161,200,75,13
+    PUSHBUTTON      "-",IDC_BTNDEL,140,6,15,13
+    PUSHBUTTON      "Default",IDC_BTNDEFAULT,9,124,54,13
+    LTEXT           "",IDC_STTIMELEFT,163,216,141,8
+    LTEXT           "Status:",IDC_STATIC,175,9,34,9
+    PUSHBUTTON      "+",IDC_BTNADD,118,6,15,13
+    GROUPBOX        "Account",IDC_STATIC,4,22,151,120
+    CONTROL         "APOP",IDC_CHECKAPOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,119,66,34,10
+    LTEXT           "Name:",IDC_STATIC,10,34,44,10
+    EDITTEXT        IDC_EDITNAME,56,32,92,12,ES_AUTOHSCROLL
+    GROUPBOX        "Options",IDC_STATIC,161,22,147,120
+    GROUPBOX        "New Mail",IDC_STATIC,7,153,149,73
+    GROUPBOX        "Errors",IDC_STATIC,161,153,143,44
+END
+
+IDD_CHOOSESTATUSMODES DIALOG  0, 0, 226, 154
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Check while ..."
+FONT 8, "MS Shell Dlg"
+BEGIN
+    DEFPUSHBUTTON   "OK",IDOK,112,133,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,169,133,50,14
+    GROUPBOX        "Choose modes",IDC_STATUSGROUP,7,7,212,119
+    CONTROL         "Offline",IDC_CHECKST0,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,19,70,9
+    CONTROL         "Online",IDC_CHECKST1,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,39,70,9
+    CONTROL         "Away",IDC_CHECKST2,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,62,70,9
+    CONTROL         "N/A",IDC_CHECKST3,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,83,70,9
+    CONTROL         "Occupied",IDC_CHECKST4,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,15,104,70,9
+    CONTROL         "DND",IDC_CHECKST5,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,19,70,9
+    CONTROL         "Free for chat",IDC_CHECKST6,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,39,70,9
+    CONTROL         "Invisible",IDC_CHECKST7,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,62,70,9
+    CONTROL         "On the phone",IDC_CHECKST8,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,83,70,9
+    CONTROL         "Out to lunch",IDC_CHECKST9,"Button",BS_AUTOCHECKBOX | BS_NOTIFY | WS_TABSTOP,134,104,70,9
+END
+
+IDD_YAMNOPT DIALOGEX 0, 0, 310, 216
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_BORDER
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    CONTROL         "HotKey1",IDC_HKFORCE,"msctls_hotkey32",WS_BORDER | WS_TABSTOP,169,15,110,12
+    LTEXT           "Hotkey for mail check:",IDC_STATIC,7,16,153,10
+    CONTROL         "TopToolBar button ""Check mail""",IDC_CHECKTTB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,28,160,11
+    GROUPBOX        "YAMN General Options",IDC_STATIC,3,2,303,80
+    CONTROL         "Enable YAMN Main Menu (Require Restart)",IDC_MAINMENU,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,46,270,9
+    GROUPBOX        "MailBrowser Options",IDC_STATIC,3,91,151,61
+    CONTROL         "Enable Close on Delete Button",IDC_CLOSEONDELETE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,103,143,11
+    CONTROL         "Show long localised date",IDC_LONGDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,100,144,10
+    CONTROL         "Don't show today's date",IDC_SMARTDATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,112,144,10
+    GROUPBOX        "Date/Time Representation",IDC_STATIC,166,91,141,61
+    CONTROL         "Don't show seconds",IDC_NOSECONDS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,170,124,135,8
+    CONTROL         "Show YAMN as a Protocol  (Require Restart)",IDC_YAMNASPROTO,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,63,270,9
+END
+
+IDD_POP3ACCOUNTPOPUP DIALOGEX 0, 0, 315, 230
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+    COMBOBOX        IDC_COMBOACCOUNT,4,4,140,65,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    GROUPBOX        "Mail Notifications",IDC_GBNEWMAIL,5,23,300,76
+    CONTROL         "Popup",IDC_CHECKPOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,32,108,10
+    CONTROL         "Single popup",IDC_RADIOPOP1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,23,43,95,10
+    CONTROL         "Multi popup",IDC_RADIOPOPN,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,23,55,95,10
+    CONTROL         "Use custom colour",IDC_CHECKCOL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,83,107,10
+    CONTROL         "",IDC_CPB,"ColourPicker",WS_TABSTOP,145,66,29,12
+    CONTROL         "",IDC_CPT,"ColourPicker",WS_TABSTOP,145,83,29,12
+    EDITTEXT        IDC_EDITPOPS,23,65,20,12,ES_AUTOHSCROLL
+    GROUPBOX        "No new mail notifications",IDC_GBNONEWMAIL,5,152,300,62
+    CONTROL         "Popup if no mail",IDC_CHECKNPOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,161,94,10
+    CONTROL         "Persistant message",IDC_CHECKNMSGP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,188,110,10
+    CONTROL         "Use custom colour",IDC_CHECKNCOL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,201,107,10
+    CONTROL         "",IDC_CPNB,"ColourPicker",WS_TABSTOP,145,181,29,12
+    CONTROL         "",IDC_CPNT,"ColourPicker",WS_TABSTOP,145,198,29,12
+    EDITTEXT        IDC_EDITNPOPS,23,173,20,12,ES_AUTOHSCROLL
+    GROUPBOX        "Connection failure notifications",IDC_GBBADCONNECT,5,101,300,49
+    CONTROL         "Popup notification if failed",IDC_CHECKFPOP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,110,118,10
+    CONTROL         "Use custom colour",IDC_CHECKFCOL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,23,136,95,10
+    CONTROL         "",IDC_CPFB,"ColourPicker",WS_TABSTOP,145,118,29,12
+    CONTROL         "",IDC_CPFT,"ColourPicker",WS_TABSTOP,145,134,29,12
+    EDITTEXT        IDC_EDITFPOPS,23,121,20,12,ES_AUTOHSCROLL
+    LTEXT           "..s Popup duration",IDC_STATIC,45,67,70,8
+    LTEXT           "..s Popup duration",IDC_STATIC,45,176,70,8
+    LTEXT           "..s Popup duration",IDC_STATIC,45,122,70,8
+    PUSHBUTTON      "Preview",IDC_PREVIEW,255,215,49,13
+    LTEXT           "Background colour",IDC_STATIC,177,184,108,10
+    LTEXT           "Text colour",IDC_STATIC,177,200,107,10
+    LTEXT           "Background colour",IDC_STATIC,177,120,108,10
+    LTEXT           "Text colour",IDC_STATIC,177,136,107,10
+    LTEXT           "Background colour",IDC_STATIC,177,69,108,10
+    LTEXT           "Text colour",IDC_STATIC,177,85,107,10
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ONLINE              ICON                    "iconeutral.ico"
+IDI_OFFLINE             ICON                    "icooffline.ico"
+IDI_NA                  ICON                    "icoyamn3.ico"
+IDI_OCCUPIED            ICON                    "iconttbdown.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Bitmap
+//
+
+IDB_ICONS               BITMAP                  "yamn.bmp"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 0,1,2,5
+ PRODUCTVERSION 0,1,2,5
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "000004b0"
+        BEGIN
+            VALUE "Comments", "Yet Another Mail Notifier"
+            VALUE "FileDescription", "Yet Another Mail Notifier"
+            VALUE "FileVersion", "0.1.2.5"
+            VALUE "InternalName", "YAMN"
+            VALUE "LegalCopyright", "Copyright � 2007"
+            VALUE "OriginalFilename", "YAMN.dll"
+            VALUE "ProductName", "YAMN tweety"
+            VALUE "ProductVersion", "0.1.2.5"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x0, 1200
+    END
+END
+
+#endif    // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/plugins/YAMN/resources/iconeutral.ico b/plugins/YAMN/resources/iconeutral.ico
new file mode 100644
index 0000000000..9304f4334a
Binary files /dev/null and b/plugins/YAMN/resources/iconeutral.ico differ
diff --git a/plugins/YAMN/resources/iconttbdown.ico b/plugins/YAMN/resources/iconttbdown.ico
new file mode 100644
index 0000000000..206eba2c76
Binary files /dev/null and b/plugins/YAMN/resources/iconttbdown.ico differ
diff --git a/plugins/YAMN/resources/icooffline.ico b/plugins/YAMN/resources/icooffline.ico
new file mode 100644
index 0000000000..db5b2e18fa
Binary files /dev/null and b/plugins/YAMN/resources/icooffline.ico differ
diff --git a/plugins/YAMN/resources/icoyamn3.ico b/plugins/YAMN/resources/icoyamn3.ico
new file mode 100644
index 0000000000..ca11f0f4f4
Binary files /dev/null and b/plugins/YAMN/resources/icoyamn3.ico differ
diff --git a/plugins/YAMN/resources/resource.h b/plugins/YAMN/resources/resource.h
new file mode 100644
index 0000000000..bd9b48b29b
--- /dev/null
+++ b/plugins/YAMN/resources/resource.h
@@ -0,0 +1,130 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by YAMN.rc
+//
+#define IDI_ONLINE                      104
+#define IDI_OFFLINE                     105
+#define IDD_DLGVIEWMESSAGES             107
+#define IDD_DLGSHOWMESSAGE              108
+#define IDI_ICOYAMN2                    112
+#define IDI_ICOYAMN1                    113
+#define IDD_DLGBADCONNECT               115
+#define IDD_POP3ACCOUNTOPT              121
+#define IDD_YAMNOPT                     126
+#define IDB_ICONS                       127
+#define IDI_NA                          131
+#define IDI_ICOTTBUP                    138
+#define IDD_PLUGINOPT                   141
+#define IDI_OCCUPIED                    159
+#define IDD_CHOOSESTATUSMODES           310
+#define IDD_OPTIONS                     311
+#define IDD_POP3ACCOUNTPOPUP            312
+#define IDC_EDITSERVER                  1000
+#define IDC_EDITPORT                    1001
+#define IDC_EDITLOGIN                   1002
+#define IDC_EDITPASS                    1003
+#define IDC_COMBOACCOUNT                1005
+#define IDC_BTNDEFAULT                  1006
+#define IDC_EDITINTERVAL                1007
+#define IDC_CHECKSND                    1008
+#define IDC_CHECKMSG                    1009
+#define IDC_CHECKAPP                    1010
+#define IDC_BTNAPP                      1011
+#define IDC_CHECKICO                    1012
+#define IDC_CHECK                       1013
+#define IDC_BTNDEL                      1014
+#define IDC_STSERVER                    1015
+#define IDC_CHECKFSND                   1016
+#define IDC_CHECKFMSG                   1017
+#define IDC_CHECKFICO                   1018
+#define IDC_CHECKST0                    1019
+#define IDC_CHECKST1                    1020
+#define IDC_CHECKST2                    1021
+#define IDC_CHECKST3                    1022
+#define IDC_CHECKST4                    1023
+#define IDC_CHECKST5                    1024
+#define IDC_CHECKST6                    1025
+#define IDC_CHECKST7                    1026
+#define IDC_EDITAPP                     1027
+#define IDC_CHECKST8                    1028
+#define IDC_CHECKST9                    1029
+#define IDC_CHECKCONTACT                1030
+#define IDC_CHECKCONTACTNICK            1031
+#define IDC_CHECKCONTACTNOEVENT         1032
+#define IDC_STTIMELEFT                  1033
+#define IDC_LISTMAILS                   1038
+#define IDC_LISTHEADERS                 1039
+#define IDC_EDITAPPPARAM                1044
+#define IDC_BTNOK                       1047
+#define IDC_COMBOCP                     1050
+#define IDC_STCP                        1055
+#define IDC_STATICMSG                   1055
+#define IDC_STPORT                      1056
+#define IDC_STLOGIN                     1057
+#define IDC_STPASS                      1058
+#define IDC_STINTERVAL                  1059
+#define IDC_AUTOBODY                    1062
+#define IDC_BTNRESET                    1063
+#define IDC_CHECKSTART                  1064
+#define IDC_STWCHECK                    1065
+#define IDC_CHECKFORCE                  1066
+#define IDC_RADIOPOP1                   1068
+#define IDC_RADIOPOPN                   1069
+#define IDC_CPB                         1070
+#define IDC_CPNB                        1071
+#define IDC_CHECKCOL                    1073
+#define IDC_CPT                         1074
+#define IDC_CPFB                        1075
+#define IDC_CPFT                        1076
+#define IDC_CHECKFCOL                   1077
+#define IDC_CHECKNCOL                   1078
+#define IDC_CPNT                        1079
+#define IDC_HKFORCE                     1081
+#define IDC_CHECKPOP                    1087
+#define IDC_CHECKNPOP                   1088
+#define IDC_CHECKFPOP                   1089
+#define IDC_EDITPOPS                    1090
+#define IDC_EDITNPOPS                   1091
+#define IDC_EDITFPOPS                   1092
+#define IDC_GBNEWMAIL                   1094
+#define IDC_GBNONEWMAIL                 1095
+#define IDC_GBBADCONNECT                1096
+#define IDC_STSTATUS                    1102
+#define IDC_COMBOPLUGINS                1104
+#define IDC_STWWW                       1111
+#define IDC_STMAIL                      1113
+#define IDC_STCOPY                      1114
+#define IDC_STDESC                      1115
+#define IDC_STVER                       1116
+#define IDC_CHECKTTB                    1117
+#define IDC_CHECKSSL                    1117
+#define IDC_CHECKNMSGP                  1118
+#define IDC_CHECKNOTLS                  1120
+#define IDC_CHECKKBN                    1121
+#define IDC_BTNSTATUS                   1123
+#define IDC_OPTIONSTAB                  1124
+#define IDC_BTNCHECKALL                 1125
+#define IDC_MAINMENU                    1126
+#define IDC_CLOSEONDELETE               1127
+#define IDC_LONGDATE                    1128
+#define IDC_SMARTDATE                   1129
+#define IDC_NOSECONDS                   1130
+#define IDC_YAMNASPROTO                 1131
+#define IDC_CHECKAPOP                   1200
+#define IDC_STATUSGROUP                 1338
+#define IDC_SPLITTER                    1400
+#define IDC_EDITBODY                    1401
+#define IDC_PREVIEW                     1402
+#define IDC_BTNADD                      1403
+#define IDC_EDITNAME                    1404
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        143
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1407
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/plugins/YAMN/resources/yamn.bmp b/plugins/YAMN/resources/yamn.bmp
new file mode 100644
index 0000000000..91a9e34ddf
Binary files /dev/null and b/plugins/YAMN/resources/yamn.bmp differ
diff --git a/plugins/YAMN/services.cpp b/plugins/YAMN/services.cpp
new file mode 100644
index 0000000000..60b24c2816
--- /dev/null
+++ b/plugins/YAMN/services.cpp
@@ -0,0 +1,541 @@
+
+#include "main.h"
+#include "yamn.h"
+// External icon var for icolib support
+
+
+//MessageWndCS
+//We want to send messages to all windows in the queue
+//When we send messages, no other window can register itself to the queue for receiving messages
+extern LPCRITICAL_SECTION MessageWndCS;
+
+//Plugin registration CS
+//Used if we add (register) plugin to YAMN plugins and when we browse through registered plugins
+extern LPCRITICAL_SECTION PluginRegCS;
+
+//AccountWriterCS
+//We want to store number of writers of Accounts (number of Accounts used for writing)
+//If we want to read all accounts (for saving to file) immidiatelly, we have to wait until no account is changing (no thread writing to account)
+extern SCOUNTER *AccountWriterSO;
+
+//NoExitEV
+//Event that is signaled when there's a request to exit, so no new pop3 check should be performed
+extern HANDLE ExitEV;
+
+//WriteToFileEV
+//If this is signaled, write accounts to file is performed. Set this event if you want to actualize your accounts and messages
+extern HANDLE WriteToFileEV;
+
+//extern HICON hYamnIconsOrg[];
+extern HICON hYamnIcons[];
+extern char *iconDescs[];
+extern char *iconNames[];
+extern HIMAGELIST CSImages;
+
+extern void __stdcall	SSL_DebugLog( const char *fmt, ... );
+
+extern char *ProtoName;
+extern INT_PTR YAMN_STATUS;
+
+extern PYAMN_VARIABLES pYAMNVar;
+extern HYAMNPROTOPLUGIN POP3Plugin;
+
+static INT_PTR Service_GetCaps(WPARAM wParam, LPARAM lParam)
+{
+	if(wParam==PFLAGNUM_4)
+		return PF4_NOCUSTOMAUTH;
+	if(wParam==PFLAG_UNIQUEIDTEXT)
+        return (INT_PTR) Translate("Nick");
+	if(wParam==PFLAG_MAXLENOFMESSAGE)
+        return 400;
+	if(wParam==PFLAG_UNIQUEIDSETTING)
+        return (INT_PTR) "Id";
+	if(wParam==PFLAGNUM_2)
+		return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND;
+	if(wParam==PFLAGNUM_5)
+		if(DBGetContactSettingByte(NULL, YAMN_DBMODULE, YAMN_SHOWASPROTO, 1))
+			return PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND;
+		else
+			return PF2_ONLINE | PF2_SHORTAWAY | PF2_LONGAWAY | PF2_LIGHTDND;
+	return 0;
+}
+
+static INT_PTR Service_GetStatus(WPARAM wParam, LPARAM lParam)
+{
+	return YAMN_STATUS;	
+}
+
+static INT_PTR Service_SetStatus(WPARAM wParam,LPARAM lParam)
+{	
+	INT_PTR newstatus = (wParam!=ID_STATUS_OFFLINE)?ID_STATUS_ONLINE:ID_STATUS_OFFLINE;
+	if (newstatus != YAMN_STATUS){
+		INT_PTR oldstatus = YAMN_STATUS;
+		YAMN_STATUS=newstatus;
+		ProtoBroadcastAck(ProtoName,NULL,ACKTYPE_STATUS,ACKRESULT_SUCCESS,(HANDLE)oldstatus,newstatus);
+	}
+	return 0;
+
+}
+
+static INT_PTR Service_GetName(WPARAM wParam, LPARAM lParam)
+{
+	lstrcpyn((char *) lParam, ProtoName, wParam);;
+	return 0;
+}
+
+static INT_PTR Service_LoadIcon(WPARAM wParam,LPARAM lParam)
+{
+	if ( LOWORD( wParam ) == PLI_PROTOCOL )
+		return (INT_PTR)CopyIcon(hYamnIcons[0]); // noone cares about other than PLI_PROTOCOL
+
+	return (INT_PTR)(HICON)NULL;
+
+}
+ 
+/*static*/ INT_PTR ClistContactDoubleclicked(WPARAM wParam, LPARAM lParam)
+{
+	ContactDoubleclicked(((CLISTEVENT*)lParam)->lParam, lParam);
+	return 0;
+}
+
+static int Service_ContactDoubleclicked(WPARAM wParam, LPARAM lParam)
+{
+	ContactDoubleclicked(wParam, lParam);
+	return 0;
+}
+
+static INT_PTR ContactApplication(WPARAM wParam, LPARAM lParam)
+{
+	DBVARIANT dbv;
+	char *szProto;
+	HACCOUNT ActualAccount;
+
+	szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+	if(szProto != NULL && strcmp(szProto, ProtoName)==0)
+	{
+		if(!DBGetContactSetting((HANDLE) wParam,ProtoName,"Id",&dbv)) 
+		{
+			ActualAccount=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+			if(ActualAccount != NULL)
+			{
+				PROCESS_INFORMATION pi;
+				STARTUPINFOW si;
+
+				ZeroMemory(&si,sizeof(si));
+				si.cb=sizeof(si);
+				
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"ContactApplication:ActualAccountSO-read wait\n");
+				#endif
+				if(WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
+				{
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"ContactApplication:ualAccountSO-read enter\n");
+					#endif
+					if(ActualAccount->NewMailN.App!=NULL)
+					{
+						WCHAR *Command;
+						if(ActualAccount->NewMailN.AppParam!=NULL)
+							Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+wcslen(ActualAccount->NewMailN.AppParam)+6];
+						else
+							Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+6];
+					
+						if(Command!=NULL)
+						{
+							lstrcpyW(Command,L"\"");
+							lstrcatW(Command,ActualAccount->NewMailN.App);
+							lstrcatW(Command,L"\" ");
+							if(ActualAccount->NewMailN.AppParam!=NULL)
+								lstrcatW(Command,ActualAccount->NewMailN.AppParam);
+							CreateProcessW(NULL,Command,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi);
+							delete[] Command;
+						}
+					}
+
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"ContactApplication:ActualAccountSO-read done\n");
+					#endif
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+				}
+				#ifdef DEBUG_SYNCHRO
+				else
+					DebugLog(SynchroFile,"ContactApplication:ActualAccountSO-read enter failed\n");
+				#endif
+			}
+			DBFreeVariant(&dbv);
+		}
+	}
+	return 0;
+}
+
+DWORD WINAPI SWMRGWaitToRead(PSWMRG pSWMRG, DWORD dwTimeout);
+static INT_PTR AccountMailCheck(WPARAM wParam, LPARAM lParam){
+	//This service will check/sincronize the account pointed by wParam
+	HACCOUNT ActualAccount = (HACCOUNT)wParam;
+	HANDLE ThreadRunningEV;
+	DWORD tid;
+	// copy/paste make mistakes
+	if(ActualAccount != NULL)
+	{
+		//we use event to signal, that running thread has all needed stack parameters copied
+		if(NULL==(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+			return 0;
+		//if we want to close miranda, we get event and do not run pop3 checking anymore
+		if(WAIT_OBJECT_0==WaitForSingleObject(ExitEV,0))
+			return 0;
+		EnterCriticalSection(PluginRegCS);
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"AccountCheck:ActualAccountSO-read wait\n");
+		#endif
+		if(WAIT_OBJECT_0!=SWMRGWaitToRead(ActualAccount->AccountAccessSO,0))
+		{
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read wait failed\n");
+			#endif
+		}
+		else
+		{
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read enter\n");
+			#endif
+			if((ActualAccount->Flags & YAMN_ACC_ENA) && ActualAccount->Plugin->Fcn->SynchroFcnPtr)
+			{
+				struct CheckParam ParamToPlugin={YAMN_CHECKVERSION,ThreadRunningEV,ActualAccount,lParam?YAMN_FORCECHECK:YAMN_NORMALCHECK,(void *)0,NULL};
+				HANDLE NewThread;
+
+				ActualAccount->TimeLeft=ActualAccount->Interval;
+				if(NewThread=CreateThread(NULL,0,(YAMN_STANDARDFCN)ActualAccount->Plugin->Fcn->SynchroFcnPtr,&ParamToPlugin,0,&tid))
+				{
+					WaitForSingleObject(ThreadRunningEV,INFINITE);
+					CloseHandle(NewThread);
+				}
+				else
+				{
+					//ReadDoneFcn(ActualAccount->AccountAccessSO);
+				}
+
+			}
+			ReadDoneFcn(ActualAccount->AccountAccessSO);
+		}
+		LeaveCriticalSection(PluginRegCS);
+		CloseHandle(ThreadRunningEV);
+	}
+	return 0;
+}
+
+static INT_PTR ContactMailCheck(WPARAM wParam, LPARAM lParam)
+{
+
+	DBVARIANT dbv;
+	char *szProto;
+	HACCOUNT ActualAccount;
+	HANDLE ThreadRunningEV;
+	DWORD tid;
+
+	szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+	if(szProto != NULL && strcmp(szProto, ProtoName)==0)
+	{
+		if(!DBGetContactSetting((HANDLE) wParam,ProtoName,"Id",&dbv)) 
+		{
+			ActualAccount=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+			if(ActualAccount != NULL)
+			{
+				//we use event to signal, that running thread has all needed stack parameters copied
+				if(NULL==(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+					return 0;
+				//if we want to close miranda, we get event and do not run pop3 checking anymore
+				if(WAIT_OBJECT_0==WaitForSingleObject(ExitEV,0))
+					return 0;
+				EnterCriticalSection(PluginRegCS);
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read wait\n");
+				#endif
+				if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+				{
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read wait failed\n");
+					#endif
+				}
+				else
+				{
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read enter\n");
+					#endif
+					if((ActualAccount->Flags & YAMN_ACC_ENA) && (ActualAccount->StatusFlags & YAMN_ACC_FORCE))			//account cannot be forced to check
+					{
+						if(ActualAccount->Plugin->Fcn->ForceCheckFcnPtr==NULL)
+						{
+							ReadDoneFcn(ActualAccount->AccountAccessSO);
+						}
+						struct CheckParam ParamToPlugin={YAMN_CHECKVERSION,ThreadRunningEV,ActualAccount,YAMN_FORCECHECK,(void *)0,NULL};
+
+						if(NULL==CreateThread(NULL,0,(YAMN_STANDARDFCN)ActualAccount->Plugin->Fcn->ForceCheckFcnPtr,&ParamToPlugin,0,&tid))
+						{
+							ReadDoneFcn(ActualAccount->AccountAccessSO);
+						}
+						else
+							WaitForSingleObject(ThreadRunningEV,INFINITE);
+					}
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+				}
+				LeaveCriticalSection(PluginRegCS);
+				CloseHandle(ThreadRunningEV);
+			}
+			DBFreeVariant(&dbv);
+		}
+
+	}
+	return 0;
+}
+
+
+void MainMenuAccountClicked(WPARAM wParam, LPARAM lParam) 
+{
+	
+}
+
+/*static*/ void ContactDoubleclicked(WPARAM wParam, LPARAM lParam)
+{
+	DBVARIANT dbv;
+	char *szProto;
+	HACCOUNT ActualAccount;
+
+	szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+	if(szProto != NULL && strcmp(szProto, ProtoName)==0)
+	{
+		if(!DBGetContactSetting((HANDLE) wParam,ProtoName,"Id",&dbv)) 
+		{
+			ActualAccount=(HACCOUNT) CallService(MS_YAMN_FINDACCOUNTBYNAME,(WPARAM)POP3Plugin,(LPARAM)dbv.pszVal);
+			if(ActualAccount != NULL)
+			{
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"Service_ContactDoubleclicked:ActualAccountSO-read wait\n");
+				#endif
+				if(WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
+				{
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"Service_ContactDoubleclicked:ActualAccountSO-read enter\n");
+					#endif
+					YAMN_MAILBROWSERPARAM Param={(HANDLE)0,ActualAccount,ActualAccount->NewMailN.Flags,ActualAccount->NoNewMailN.Flags,0};
+
+					Param.nnflags=Param.nnflags | YAMN_ACC_MSG;			//show mails in account even no new mail in account
+					Param.nnflags=Param.nnflags & ~YAMN_ACC_POP;
+
+					Param.nflags=Param.nflags | YAMN_ACC_MSG;			//show mails in account even no new mail in account
+					Param.nflags=Param.nflags & ~YAMN_ACC_POP;
+
+					RunMailBrowserSvc((WPARAM)&Param,(LPARAM)YAMN_MAILBROWSERVERSION);
+					
+					#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"Service_ContactDoubleclicked:ActualAccountSO-read done\n");
+					#endif
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+				}
+				#ifdef DEBUG_SYNCHRO
+				else
+					DebugLog(SynchroFile,"Service_ContactDoubleclicked:ActualAccountSO-read enter failed\n");
+				#endif
+				
+			}
+			DBFreeVariant(&dbv);
+		}
+
+	}
+}
+
+int IcoLibIconsChanged(WPARAM wParam, LPARAM lParam)
+{
+	HICON temp;
+	for (int i=0;i<ICONSNUMBER;i++){
+		if (temp = (HICON) CallService(MS_SKIN2_GETICON, 0, (LPARAM) iconNames[i]))hYamnIcons[i]=temp; 
+	}
+	{	CLISTMENUITEM mi = {0};
+		extern HANDLE hMenuItemMain;
+		extern HANDLE hMenuItemCont;
+		extern HANDLE hMenuItemContApp;
+
+		mi.cbSize = sizeof(mi);
+		mi.flags = CMIM_ICON;
+
+		mi.hIcon = hYamnIcons[5];
+		CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItemMain, (LPARAM)&mi);
+		CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItemCont, (LPARAM)&mi);
+		mi.hIcon = hYamnIcons[4];
+		CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hMenuItemContApp, (LPARAM)&mi);
+	}
+	return 0;
+}
+
+int SystemModulesLoaded(WPARAM,LPARAM); //in main.cpp
+typedef struct { HANDLE hookHandle;	const char *hookName; MIRANDAHOOK mirandaFunction;} HookDataType;
+static HookDataType hookData[]={
+	{0,ME_TTB_MODULELOADED,AddTopToolbarIcon},
+	{0,ME_SYSTEM_MODULESLOADED,SystemModulesLoaded}, //pop3 plugin must be included after all miranda modules are loaded
+	{0,ME_OPT_INITIALISE,YAMNOptInitSvc},
+	{0,ME_PLUGINUNINSTALLER_UNINSTALL,UninstallQuestionSvc},
+	{0,ME_SYSTEM_PRESHUTDOWN,Shutdown},
+	{0,ME_CLIST_DOUBLECLICKED, Service_ContactDoubleclicked},
+    {0,ME_SKIN2_ICONSCHANGED, IcoLibIconsChanged},
+	{0,0,0}//end marker
+};
+
+
+void HookEvents(void)
+{
+	//We set function which registers needed POP3 accounts. This is a part of internal POP3 plugin.
+	//Your plugin should do the same task in your Load fcn. Why we call it in MODULESLOADED? Because netlib
+	//user can be registered after all modules are loaded (see m_netlib.h in Miranda)
+	for (int i=0;hookData[i].hookName;i++){
+		hookData[i].hookHandle = HookEvent(hookData[i].hookName,hookData[i].mirandaFunction);
+	}
+}
+void UnhookEvents(void){
+	for (int i=0;i<(sizeof(hookData)/sizeof(hookData[0]));i++){
+		if (hookData[i].hookHandle) UnhookEvent(hookData[i].hookHandle);
+	}
+}
+
+typedef struct { HANDLE serviceHandle;	const char *serviceName; MIRANDASERVICE serviceFunction;} ServiceDataType;
+static ServiceDataType serviceData[]={
+	{0,YAMN_DBMODULE PS_GETCAPS,Service_GetCaps},
+	{0,YAMN_DBMODULE PS_GETSTATUS,Service_GetStatus},
+	{0,YAMN_DBMODULE PS_SETSTATUS,Service_SetStatus},
+	{0,YAMN_DBMODULE PS_GETNAME,Service_GetName},
+	{0,YAMN_DBMODULE PS_LOADICON,Service_LoadIcon},
+
+	//Function with which protocol plugin can register
+	{0,MS_YAMN_GETFCNPTR,GetFcnPtrSvc},
+	
+	//Function returns pointer to YAMN variables
+	{0,MS_YAMN_GETVARIABLES,GetVariablesSvc},
+	
+	//Function with which protocol plugin can register
+	{0,MS_YAMN_REGISTERPROTOPLUGIN,RegisterProtocolPluginSvc},
+	
+	//Function with which protocol plugin can unregister
+	{0,MS_YAMN_UNREGISTERPROTOPLUGIN,UnregisterProtocolPluginSvc},
+	
+	//Function creates an account for plugin
+	{0,MS_YAMN_CREATEPLUGINACCOUNT,CreatePluginAccountSvc},
+	
+	//Function deletes plugin account 
+	{0,MS_YAMN_DELETEPLUGINACCOUNT,DeletePluginAccountSvc},
+	
+	//Finds account for plugin by name
+	{0,MS_YAMN_FINDACCOUNTBYNAME,FindAccountByNameSvc},
+	
+	//Creates next account for plugin
+	{0,MS_YAMN_GETNEXTFREEACCOUNT,GetNextFreeAccountSvc},
+	
+	//Function removes account from YAMN queue. Does not delete it from memory
+	{0,MS_YAMN_DELETEACCOUNT,DeleteAccountSvc},
+	
+	//Function finds accounts for specified plugin
+	{0,MS_YAMN_READACCOUNTSA,AddAccountsFromFileASvc},
+	
+	//Function that reads all plugin mails from file
+	{0,MS_YAMN_READACCOUNTSW,AddAccountsFromFileWSvc},
+	
+	//Function that stores all plugin mails to one file 
+	{0,MS_YAMN_WRITEACCOUNTSA,WriteAccountsToFileASvc},
+	
+	//Function that stores all plugin mails to one file 
+	{0,MS_YAMN_WRITEACCOUNTSW,WriteAccountsToFileWSvc},
+	
+	//Function that returns user's filename
+	{0,MS_YAMN_GETFILENAMEA,GetFileNameASvc},
+	
+	//Function that returns user's filename (unicode input)
+	{0,MS_YAMN_GETFILENAMEW,GetFileNameWSvc},
+	
+	//Releases unicode string from memory
+	{0,MS_YAMN_DELETEFILENAME,DeleteFileNameSvc},
+	
+	//Checks mail
+	{0,MS_YAMN_FORCECHECK,ForceCheckSvc},
+	
+	//Runs YAMN's mail browser
+	{0,MS_YAMN_MAILBROWSER,RunMailBrowserSvc},
+	
+	//Runs YAMN's bad conenction window
+	{0,MS_YAMN_BADCONNECTION,RunBadConnectionSvc},
+	
+	//Function creates new mail for plugin
+	{0,MS_YAMN_CREATEACCOUNTMAIL,CreateAccountMailSvc},
+	
+	//Function deletes plugin account 
+	{0,MS_YAMN_DELETEACCOUNTMAIL,DeleteAccountMailSvc},
+	
+	//Function with which filter plugin can register
+	{0,MS_YAMN_REGISTERFILTERPLUGIN,RegisterFilterPluginSvc},
+	
+	//Function with which filter plugin can unregister
+	{0,MS_YAMN_UNREGISTERFILTERPLUGIN,UnregisterFilterPluginSvc},
+	
+	//Function filters mail
+	{0,MS_YAMN_FILTERMAIL,FilterMailSvc},
+
+	//Function contact list double click
+	{0,MS_YAMN_CLISTDBLCLICK,ClistContactDoubleclicked},
+
+	//Function to check individual account
+	{0,MS_YAMN_ACCOUNTCHECK,AccountMailCheck},
+
+	//Function contact list context menu click
+	{0,MS_YAMN_CLISTCONTEXT,ContactMailCheck},
+
+	//Function contact list context menu click
+	{0,MS_YAMN_CLISTCONTEXTAPP,ContactApplication},
+
+	{0,0,0}//end marker
+};
+
+void CreateServiceFunctions(void)
+{
+	for (int i=0;serviceData[i].serviceName;i++){
+		serviceData[i].serviceHandle = CreateServiceFunction(serviceData[i].serviceName,serviceData[i].serviceFunction);
+	}
+};
+
+void DestroyServiceFunctions(void)
+{
+	for (int i=0;serviceData[i].serviceName;i++){
+		if (serviceData[i].serviceHandle) DestroyServiceFunction(serviceData[i].serviceHandle);
+	}
+};
+
+//Function to put all enabled contact to the Online status
+void RefreshContact(void)
+{
+	HACCOUNT Finder;
+
+	for(Finder=POP3Plugin->FirstAccount;Finder!=NULL;Finder=Finder->Next)
+	{
+		if(Finder->hContact != NULL)
+		{
+			if((Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT))
+			{
+				DBDeleteContactSetting(Finder->hContact, "CList", "Hidden");
+			}
+			else
+			{
+				DBWriteContactSettingByte(Finder->hContact, "CList", "Hidden", 1);
+			}
+		}
+		else
+		{
+			if((Finder->Flags & YAMN_ACC_ENA) && (Finder->NewMailN.Flags & YAMN_ACC_CONT))
+			{
+				Finder->hContact =(HANDLE) CallService(MS_DB_CONTACT_ADD, 0, 0);
+				CallService(MS_PROTO_ADDTOCONTACT,(WPARAM)Finder->hContact,(LPARAM)ProtoName);
+				DBWriteContactSettingString(Finder->hContact,ProtoName,"Id",Finder->Name);
+				DBWriteContactSettingString(Finder->hContact,ProtoName,"Nick",Finder->Name);
+				DBWriteContactSettingString(Finder->hContact,"Protocol","p",ProtoName);
+				DBWriteContactSettingWord(Finder->hContact, ProtoName, "Status", ID_STATUS_ONLINE);
+				DBWriteContactSettingString(Finder->hContact, "CList", "StatusMsg", Translate("No new mail message"));
+			}
+
+		}
+	}
+
+}
diff --git a/plugins/YAMN/synchro.cpp b/plugins/YAMN/synchro.cpp
new file mode 100644
index 0000000000..e791d5f799
--- /dev/null
+++ b/plugins/YAMN/synchro.cpp
@@ -0,0 +1,378 @@
+/*
+ * This code implements synchronization objects code between threads. If you want, you can include it to your
+ * code. This file is not dependent on any other external code (functions)
+ *
+ * (c) majvan 2002-2004
+ */
+#if !defined(_WIN64)
+	#include "filter/simple/AggressiveOptimize.h"
+#endif
+#include <windows.h>
+#include "debug.h"
+#include "m_yamn.h"
+#include "m_synchro.h"
+#ifdef DEBUG_SYNCHRO
+#include <tchar.h>
+#include <stdio.h>
+#endif
+
+// Initializes a SWMRG structure. This structure must be 
+// initialized before any writer or reader threads attempt
+// to wait on it.
+// The structure must be allocated by the application and 
+// the structure's address is passed as the first parameter.
+// The lpszName parameter is the name of the object. Pass
+// NULL if you do not want to share the object.
+BOOL WINAPI SWMRGInitialize(PSWMRG pSWMRG,TCHAR *Name);
+
+// Deletes the system resources associated with a SWMRG 
+// structure. The structure must be deleted only when
+// no writer or reader threads in the calling process
+// will wait on it.
+void WINAPI SWMRGDelete(PSWMRG pSWMRG);
+
+// A writer thread calls this function to know when 
+// it can successfully write to the shared data.
+// returns WAIT_FINISH when we are in write-access or WAIT_FAILED
+// when event about quick finishing is set (or when system returns fail when waiting for synchro object)
+DWORD WINAPI SWMRGWaitToWrite(PSWMRG pSWMRG,DWORD dwTimeout);
+
+// A writer thread calls this function to let other threads
+// know that it no longer needs to write to the shared data.
+void WINAPI SWMRGDoneWriting(PSWMRG pSWMRG);
+
+// A reader thread calls this function to know when 
+// it can successfully read the shared data.
+// returns WAIT_FINISH when we are in read-access or WAIT_FAILED
+// when event about quick finishing is set (or when system returns fail when waiting for synchro object)
+DWORD WINAPI SWMRGWaitToRead(PSWMRG pSWMRG, DWORD dwTimeout);
+
+// A reader thread calls this function to let other threads
+// know when it no longer needs to read the shared data.
+void WINAPI SWMRGDoneReading(PSWMRG pSWMRG);
+
+// WaitToWriteFcn
+// is used to wait for write access with SWMRG SO, but it also increments counter if successfull
+// returns WAIT_FAILED or WAIT_FINISH
+// when WAIT_FAILED, we should not begin to access datas, we are not in write-access mode
+DWORD WINAPI WaitToWriteFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+
+// WriteDoneFcn
+// is used to release write access with SWMRG SO, but it also decrements counter if successfull
+void WINAPI WriteDoneFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+
+// WaitToReadFcn
+// is used to wait for read access with SWMRG SO, but it also increments counter if successfull
+// returns WAIT_FAILED or WAIT_FINISH
+// when WAIT_FAILED, we should not begin to access datas, we are not in read-access mode
+DWORD WINAPI WaitToReadFcn(PSWMRG SObject);
+
+// WriteDoneFcn
+// is used to release read access with SWMRG SO, but it also decrements counter if successfull
+void WINAPI ReadDoneFcn(PSWMRG SObject);
+
+// This functions is for export purposes
+// Plugin can call this function to manage SCOUNTER synchronization object
+
+// Gets number value stored in SCOUNTER SO
+// Note you must not read the number from memory directly, because
+// CPU can stop reading thread when it has read HI-Word, then another thread
+// can change the value and then OS starts the previous thread, that reads the
+// LO-WORD of DWORD. And the return value HI+LO-WORD is corrupted
+DWORD WINAPI SCGetNumberFcn(PSCOUNTER SCounter);
+
+// Increments SCOUNTER and unsets event
+// Returns Number after incrementing
+DWORD WINAPI SCIncFcn(PSCOUNTER SCounter);
+
+// Decrements SCOUNTER and sets event if zero
+// Returns Number after decrementing
+DWORD WINAPI SCDecFcn(PSCOUNTER SCounter);
+
+struct CExportedFunctions SynchroExportedFcn[]=
+{
+	{YAMN_WAITTOWRITEID,(void *)WaitToWriteFcn},
+	{YAMN_WRITEDONEID,(void *)WriteDoneFcn},
+	{YAMN_WAITTOREADID,(void *)WaitToReadFcn},
+	{YAMN_READDONEID,(void *)ReadDoneFcn},
+	{YAMN_SCGETNUMBERID,(void *)SCGetNumberFcn},
+	{YAMN_SCINCID,(void *)SCIncFcn},
+	{YAMN_SCDECID,(void *)SCDecFcn},
+};
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+void WINAPI SWMRGDelete(PSWMRG pSWMRG)
+{
+// Destroys any synchronization objects that were 
+// successfully created.
+	if (NULL!=pSWMRG->hEventNoWriter)
+		CloseHandle(pSWMRG->hEventNoWriter);
+	if (NULL!=pSWMRG->hEventNoReaders)
+		CloseHandle(pSWMRG->hEventNoReaders);
+	if (NULL!=pSWMRG->hSemNumReaders)
+		CloseHandle(pSWMRG->hSemNumReaders);
+	if (NULL!=pSWMRG->hFinishEV)
+		CloseHandle(pSWMRG->hFinishEV);
+}
+
+BOOL WINAPI SWMRGInitialize(PSWMRG pSWMRG,TCHAR *Name)
+{
+	pSWMRG->hEventNoWriter=NULL;
+	pSWMRG->hEventNoReaders=NULL;
+	pSWMRG->hSemNumReaders=NULL;
+	pSWMRG->hFinishEV=NULL;
+
+// Creates the automatic-reset event that is signalled when 
+// no writer threads are writing.
+// Initially no reader threads are reading.
+	if(Name!=NULL)
+		Name[0]=(TCHAR)'W';
+	pSWMRG->hEventNoWriter=CreateEvent(NULL,FALSE,TRUE,Name);
+
+// Creates the manual-reset event that is signalled when 
+// no reader threads are reading.
+// Initially no reader threads are reading.
+	if(Name!=NULL)
+		Name[0]=(TCHAR)'R';
+	pSWMRG->hEventNoReaders=CreateEvent(NULL,TRUE,TRUE,Name);
+
+// Initializes the variable that indicates the number of 
+// reader threads that are reading.
+// Initially no reader threads are reading.
+	if(Name!=NULL)
+		Name[0]=(TCHAR)'C';
+	pSWMRG->hSemNumReaders=CreateSemaphore(NULL,0,0x7FFFFFFF,Name);
+
+	if(Name!=NULL)
+		Name[0]=(TCHAR)'F';
+	pSWMRG->hFinishEV=CreateEvent(NULL,TRUE,FALSE,Name);
+
+// If a synchronization object could not be created,
+// destroys any created objects and return failure.
+	if((NULL==pSWMRG->hEventNoWriter) || (NULL==pSWMRG->hEventNoReaders) || (NULL==pSWMRG->hSemNumReaders) || (NULL==pSWMRG->hFinishEV))
+	{
+		SWMRGDelete(pSWMRG);
+		return FALSE;
+	}
+	return TRUE;
+}
+
+DWORD WINAPI SWMRGWaitToWrite(PSWMRG pSWMRG,DWORD dwTimeout)
+{
+	DWORD dw; 
+	HANDLE aHandles[2];
+
+// We can write if the following are true:
+// 1. No other threads are writing.
+// 2. No threads are reading.
+// But first we have to know if SWMRG structure is not about to delete
+	aHandles[0]=pSWMRG->hEventNoWriter;
+	aHandles[1]=pSWMRG->hEventNoReaders;
+	if(WAIT_OBJECT_0==(dw=WaitForSingleObject(pSWMRG->hFinishEV,0)))
+		return WAIT_FINISH;
+	if(WAIT_FAILED==dw)
+		return dw;
+	dw=WaitForMultipleObjects(2,aHandles,TRUE,dwTimeout);
+// if a request to delete became later, we should not catch it. Try once more to ask if account is not about to delete
+	if((dw!=WAIT_FAILED) && (WAIT_OBJECT_0==(WaitForSingleObject(pSWMRG->hFinishEV,0))))
+	{
+		SetEvent(pSWMRG->hEventNoWriter);
+		return WAIT_FINISH;
+	}
+
+// This thread can write to the shared data.
+// Automatic event for NoWriter sets hEventNoWriter to nonsignaled after WaitForMultipleObject
+
+// Because a writer thread is writing, the Event 
+// should not be reset. This stops other 
+// writers and readers.
+	return dw;
+}
+
+void WINAPI SWMRGDoneWriting(PSWMRG pSWMRG)
+// Presumably, a writer thread calling this function has
+// successfully called WaitToWrite. This means that we
+// do not have to wait on any synchronization objects 
+// here because the writer already owns the Event.
+{
+// Allow other writer/reader threads to use
+// the SWMRG synchronization object.
+	SetEvent(pSWMRG->hEventNoWriter);
+}
+
+DWORD WINAPI SWMRGWaitToRead(PSWMRG pSWMRG, DWORD dwTimeout)
+{
+	DWORD dw; 
+	LONG lPreviousCount;
+
+// We can read if no threads are writing.
+// And there's not request to delete structure
+	if(WAIT_OBJECT_0==(dw=WaitForSingleObject(pSWMRG->hFinishEV,0)))
+		return WAIT_FINISH;
+	if(WAIT_FAILED==dw)
+		return dw;
+	dw=WaitForSingleObject(pSWMRG->hEventNoWriter, dwTimeout);
+// if a request to delete became later, we should not catch it. Try once more to ask if account is not about to delete
+	if((dw!=WAIT_FAILED) && (WAIT_OBJECT_0==(WaitForSingleObject(pSWMRG->hFinishEV,0))))
+	{
+		SetEvent(pSWMRG->hEventNoWriter);
+		return WAIT_FINISH;
+	}
+
+	if(dw==WAIT_OBJECT_0)
+	{
+	// This thread can read from the shared data.
+	// Increment the number of reader threads.
+	// But there can't be more than one thread incrementing readers,
+	// so this is why we use semaphore.
+		ReleaseSemaphore(pSWMRG->hSemNumReaders,1,&lPreviousCount);
+		if(lPreviousCount==0)
+			// If this is the first reader thread, 
+			// set event to reflect this. Other reader threads can read, no writer thread can write.
+			ResetEvent(pSWMRG->hEventNoReaders);
+
+		// Allow other writer/reader threads to use
+		// the SWMRG synchronization object. hEventNoWrite is still non-signaled
+		// (it looks like writer is processing thread, but it is not true)
+		SetEvent(pSWMRG->hEventNoWriter);
+	}
+
+	return(dw);
+}
+
+void WINAPI SWMRGDoneReading(PSWMRG pSWMRG)
+{
+	HANDLE aHandles[2];
+	LONG lNumReaders;
+
+// We can stop reading if the events are available,
+// but when we stop reading we must also decrement the
+// number of reader threads.
+	aHandles[0]=pSWMRG->hEventNoWriter;
+	aHandles[1]=pSWMRG->hSemNumReaders;
+	WaitForMultipleObjects(2,aHandles,TRUE,INFINITE);
+
+// Get the remaining number of readers by releasing the
+// semaphore and then restoring the count by immediately
+// performing a wait.
+	ReleaseSemaphore(pSWMRG->hSemNumReaders,1,&lNumReaders);
+	WaitForSingleObject(pSWMRG->hSemNumReaders,INFINITE);
+
+// If there are no remaining readers, 
+// set the event to relect this.
+	if(lNumReaders==0)
+		// If there are no reader threads, 
+		// set our event to reflect this.
+		SetEvent(pSWMRG->hEventNoReaders);
+
+// Allow other writer/reader threads to use
+// the SWMRG synchronization object.
+// (it looks like writer is processing thread, but it is not true)
+	SetEvent(pSWMRG->hEventNoWriter);
+}
+
+DWORD WINAPI WaitToWriteFcn(PSWMRG SObject,PSCOUNTER SCounter)
+{
+	DWORD EnterCode;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSO WaitToWrite: %x\n",SObject);
+#endif
+	if(WAIT_OBJECT_0==(EnterCode=SWMRGWaitToWrite(SObject,INFINITE)))
+		if(SCounter!=NULL)
+			SCIncFcn(SCounter);
+	return EnterCode;
+}
+
+void WINAPI WriteDoneFcn(PSWMRG SObject,PSCOUNTER SCounter)
+{
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSO WriteDone: %x\n",SObject);
+#endif
+	SWMRGDoneWriting(SObject);
+	if(SCounter!=NULL)
+		SCDecFcn(SCounter);
+}
+
+DWORD WINAPI WaitToReadFcn(PSWMRG SObject)
+{
+	DWORD EnterCode;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSO WaitToRead: %x\n",SObject);
+#endif
+	EnterCode=SWMRGWaitToRead(SObject,INFINITE);
+	return EnterCode;
+}
+
+void WINAPI ReadDoneFcn(PSWMRG SObject)
+{
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tSO ReadDone: %x\n",SObject);
+#endif
+	SWMRGDoneReading(SObject);
+}
+
+DWORD WINAPI SCGetNumberFcn(PSCOUNTER SCounter)
+{
+	DWORD Temp;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tGetNumber-cs wait\n");
+#endif
+	EnterCriticalSection(&SCounter->CounterCS);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tGetNumber-cs enter\n");
+#endif
+	Temp=SCounter->Number;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tValue: %d\n",Temp);
+	DebugLog(SynchroFile,"\tGetNumber-cs done\n");
+#endif
+	LeaveCriticalSection(&SCounter->CounterCS);
+	return Temp;
+}
+
+DWORD WINAPI SCIncFcn(PSCOUNTER SCounter)
+{
+	DWORD Temp;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tIncrementValue-cs wait\n");
+#endif
+	EnterCriticalSection(&SCounter->CounterCS);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tIncrementValue-cs enter\n");
+#endif
+	Temp=++SCounter->Number;
+	ResetEvent(SCounter->Event);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tValue: %d\n",Temp);
+	DebugLog(SynchroFile,"\tIncrementValue-cs done\n");
+#endif
+	LeaveCriticalSection(&SCounter->CounterCS);
+	return Temp;
+}
+
+DWORD WINAPI SCDecFcn(PSCOUNTER SCounter)
+{
+	DWORD Temp;
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tDecrementValue-cs wait\n");
+#endif
+	EnterCriticalSection(&SCounter->CounterCS);
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tDecrementValue-cs enter\n");
+#endif
+	if(!(Temp=--SCounter->Number))
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"\tDecrementValue-zero ev set\n");
+#endif
+		SetEvent(SCounter->Event);
+	}
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"\tValue: %d\n",Temp);
+	DebugLog(SynchroFile,"\tDecrementValue-cs done\n");
+#endif
+	LeaveCriticalSection(&SCounter->CounterCS);
+	return Temp;
+}
diff --git a/plugins/YAMN/version.h b/plugins/YAMN/version.h
new file mode 100644
index 0000000000..e658cfee0c
--- /dev/null
+++ b/plugins/YAMN/version.h
@@ -0,0 +1,3 @@
+#define	YAMN_VERSION_H		0,1,2,5
+#define	YAMN_VERSION		PLUGIN_MAKE_VERSION( 0,1,2,5 )
+#define	YAMN_VERSION_C		"0.1.2.5"
diff --git a/plugins/YAMN/yamn.cpp b/plugins/YAMN/yamn.cpp
new file mode 100644
index 0000000000..467f3d6bba
--- /dev/null
+++ b/plugins/YAMN/yamn.cpp
@@ -0,0 +1,478 @@
+/*
+ * This code implements miscellaneous usefull functions
+ * 
+ * (c) majvan 2002-2004
+ */
+#include "m_yamn.h"
+#include "m_protoplugin.h"
+#include "m_messages.h"
+#include "m_synchro.h"
+#include "main.h"
+#include "yamn.h"
+#ifdef DEBUG_SYNCHRO
+	#include <stdio.h>
+#endif
+
+//- imported ---------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+extern PYAMN_PROTOPLUGINQUEUE FirstProtoPlugin;
+extern YAMN_VARIABLES YAMNVar;
+
+extern char *ProtoName;
+
+extern HANDLE hTTButton;		//TopToolBar button
+
+extern DWORD WriteAccountsToFile();
+extern DWORD WINAPI SWMRGWaitToRead(PSWMRG,DWORD);
+extern void WINAPI SWMRGDoneReading(PSWMRG);
+extern DWORD WINAPI WaitToReadFcn(PSWMRG);
+extern void WINAPI ReadDoneFcn(PSWMRG);
+
+//From protoplugin.cpp
+extern struct CExportedFunctions ProtoPluginExportedFcn[1];
+extern struct CExportedServices ProtoPluginExportedSvc[5];
+//From filterplugin.cpp
+extern struct CExportedFunctions FilterPluginExportedFcn[1];
+extern struct CExportedServices FilterPluginExportedSvc[2];
+//From synchro.cpp
+extern struct CExportedFunctions SynchroExportedFcn[7];
+//From account.cpp
+extern struct CExportedFunctions AccountExportedFcn[2];
+extern struct CExportedServices AccountExportedSvc[9];
+//From mails.cpp (MIME)
+extern struct CExportedFunctions MailExportedFcn[8];
+extern struct CExportedServices MailExportedSvc[5];
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+//MessageWndCS
+//We want to send messages to all windows in the queue
+//When we send messages, no other window can register itself to the queue for receiving messages
+LPCRITICAL_SECTION MessageWndCS;
+
+//Plugin registration CS
+//Used if we add (register) plugin to YAMN plugins and when we browse through registered plugins
+LPCRITICAL_SECTION PluginRegCS;
+
+//AccountWriterCS
+//We want to store number of writers of Accounts (number of Accounts used for writing)
+//If we want to read all accounts (for saving to file) immidiatelly, we have to wait until no account is changing (no thread writing to account)
+SCOUNTER *AccountWriterSO;
+
+//NoExitEV
+//Event that is signaled when there's a request to exit, so no new pop3 check should be performed
+HANDLE ExitEV;
+
+//WriteToFileEV
+//If this is signaled, write accounts to file is performed. Set this event if you want to actualize your accounts and messages
+HANDLE WriteToFileEV;
+
+//Returns pointer to YAMN exported function
+INT_PTR GetFcnPtrSvc(WPARAM wParam,LPARAM lParam);
+
+//Returns pointer to YAMN variables
+INT_PTR GetVariablesSvc(WPARAM wParam,LPARAM);
+
+// Thread running only to catch hotkeys
+DWORD WINAPI YAMNHotKeyThread(LPVOID Param);
+
+// Function every seconds decrements account counter of seconds and checks if they are 0
+// If yes, creates a POP3 thread to check account
+void CALLBACK TimerProc(HWND,UINT,UINT,DWORD);
+
+// Function called to check all accounts immidialtelly
+// no params
+INT_PTR ForceCheckSvc(WPARAM,LPARAM);
+
+//thread is running all the time
+//waits for WriteToFileEV and then writes all accounts to file
+//DWORD WINAPI FileWritingThread(PVOID);
+
+// Function is called when Miranda notifies plugin that it is about to exit
+// Ensures succesfull end of POP3 checking, sets event that no next checking should be performed
+// If there's no writer to account (POP3 thread), saves the results to the file
+//not used now, perhaps in the future
+
+
+//int ExitProc(WPARAM wParam,LPARAM lParam);
+
+//--------------------------------------------------------------------------------------------------
+//--------------------------------------------------------------------------------------------------
+
+INT_PTR GetFcnPtrSvc(WPARAM wParam,LPARAM lParam)
+{
+	register int i;
+
+	for(i=0;i<sizeof(ProtoPluginExportedFcn)/sizeof(ProtoPluginExportedFcn[0]);i++)
+		if(0==lstrcmp((char *)wParam,ProtoPluginExportedFcn[i].ID))
+			return (INT_PTR)ProtoPluginExportedFcn[i].Ptr;
+	for(i=0;i<sizeof(ProtoPluginExportedSvc)/sizeof(ProtoPluginExportedSvc[0]);i++)
+		if(0==lstrcmp((char *)wParam,ProtoPluginExportedSvc[i].ID))
+			return (INT_PTR)ProtoPluginExportedSvc[i].Ptr;
+	for(i=0;i<sizeof(SynchroExportedFcn)/sizeof(SynchroExportedFcn[0]);i++)
+		if(0==lstrcmp((char *)wParam,SynchroExportedFcn[i].ID))
+			return (INT_PTR)SynchroExportedFcn[i].Ptr;
+	for(i=0;i<sizeof(AccountExportedFcn)/sizeof(AccountExportedFcn[0]);i++)
+		if(0==lstrcmp((char *)wParam,AccountExportedFcn[i].ID))
+			return (INT_PTR)AccountExportedFcn[i].Ptr;
+	for(i=0;i<sizeof(AccountExportedSvc)/sizeof(AccountExportedSvc[0]);i++)
+		if(0==lstrcmp((char *)wParam,AccountExportedSvc[i].ID))
+			return (INT_PTR)AccountExportedSvc[i].Ptr;
+	for(i=0;i<sizeof(MailExportedFcn)/sizeof(MailExportedFcn[0]);i++)
+		if(0==lstrcmp((char *)wParam,MailExportedFcn[i].ID))
+			return (INT_PTR)MailExportedFcn[i].Ptr;
+	for(i=0;i<sizeof(MailExportedSvc)/sizeof(MailExportedSvc[0]);i++)
+		if(0==lstrcmp((char *)wParam,MailExportedSvc[i].ID))
+			return (INT_PTR)MailExportedSvc[i].Ptr;
+	for(i=0;i<sizeof(FilterPluginExportedFcn)/sizeof(FilterPluginExportedFcn[0]);i++)
+		if(0==lstrcmp((char *)wParam,FilterPluginExportedFcn[i].ID))
+			return (INT_PTR)FilterPluginExportedFcn[i].Ptr;
+	for(i=0;i<sizeof(FilterPluginExportedSvc)/sizeof(FilterPluginExportedSvc[0]);i++)
+		if(0==lstrcmp((char *)wParam,FilterPluginExportedSvc[i].ID))
+			return (INT_PTR)FilterPluginExportedSvc[i].Ptr;
+	return (INT_PTR)NULL;
+}
+
+INT_PTR GetVariablesSvc(WPARAM wParam,LPARAM)
+{
+	return wParam==YAMN_VARIABLESVERSION ? (INT_PTR)&YAMNVar : (INT_PTR)NULL;
+}
+
+DWORD WINAPI YAMNHotKeyThread(LPVOID Param)
+{
+	MSG WinMessage;
+	WORD HotKey = LOWORD(Param);
+	int HotKeyID;
+
+//	register hotkey for main YAMN thread first 
+	if(!(HotKeyID=RegisterHotKey(NULL,(int)GlobalAddAtom(YAMN_HKCHECKMAIL),HIBYTE(HotKey),LOBYTE(HotKey))))
+		return 0;
+
+	while(1)
+	{
+		GetMessage(&WinMessage,NULL,WM_HOTKEY,WM_YAMN_CHANGEHOTKEY);
+
+//	if we want to close miranda, we get event and do not run pop3 checking anymore
+		if(WAIT_OBJECT_0==WaitForSingleObject(ExitEV,0))
+			break;
+
+		switch(WinMessage.message)
+		{
+//	user pressed hotkey
+			case WM_HOTKEY:
+				ForceCheckSvc((WPARAM)0,(LPARAM)0);
+				break;
+//	hotkey changed
+			case WM_YAMN_CHANGEHOTKEY:
+				UnregisterHotKey(NULL,HotKeyID);
+				HotKeyID=RegisterHotKey(NULL,(int)GlobalAddAtom(YAMN_HKCHECKMAIL),WinMessage.wParam,WinMessage.lParam);
+				break;
+		}
+	}
+	return 1;
+}
+
+void CALLBACK TimerProc(HWND,UINT,UINT,DWORD)
+{
+	PYAMN_PROTOPLUGINQUEUE ActualPlugin;
+	HACCOUNT ActualAccount;
+	HANDLE ThreadRunningEV;
+	DWORD Status,tid;
+
+//	we use event to signal, that running thread has all needed stack parameters copied
+	if(NULL==(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+		return;
+//	if we want to close miranda, we get event and do not run checking anymore
+	if(WAIT_OBJECT_0==WaitForSingleObject(ExitEV,0))
+		return;
+//	Get actual status of current user in Miranda
+		Status=CallService(MS_CLIST_GETSTATUSMODE,0,0);
+
+	EnterCriticalSection(PluginRegCS);
+	for(ActualPlugin=FirstProtoPlugin;ActualPlugin!=NULL;ActualPlugin=ActualPlugin->Next)
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"TimerProc:AccountBrowserSO-read wait\n");
+#endif
+		if(WAIT_OBJECT_0!=SWMRGWaitToRead(ActualPlugin->Plugin->AccountBrowserSO,0))			//we want to access accounts immiadtelly
+		{
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"TimerProc:AccountBrowserSO-read enter failed\n");
+#endif
+			LeaveCriticalSection(PluginRegCS);
+			return;
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"TimerProc:AccountBrowserSO-read enter\n");
+#endif
+		for(ActualAccount=ActualPlugin->Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=ActualAccount->Next)
+		{
+			if(ActualAccount->Plugin==NULL || ActualAccount->Plugin->Fcn==NULL)		//account not inited
+				continue;
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read wait\n");
+#endif
+			if(WAIT_OBJECT_0!=SWMRGWaitToRead(ActualAccount->AccountAccessSO,0))
+			{
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read wait failed\n");
+#endif
+				continue;
+			}
+#ifdef DEBUG_SYNCHRO
+			
+			switch(Status)
+			{
+			case ID_STATUS_OFFLINE:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status offline\n");
+				break;
+			case ID_STATUS_ONLINE:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status online\n");
+				break;
+			case ID_STATUS_AWAY:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status away\n");
+				break;
+			case ID_STATUS_DND:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status dnd\n");
+				break;
+			case ID_STATUS_NA:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status na\n");
+				break;
+			case ID_STATUS_OCCUPIED:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status occupied\n");
+				break;
+			case ID_STATUS_FREECHAT:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status freechat\n");
+				break;
+			case ID_STATUS_INVISIBLE:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status invisible\n");
+				break;
+			case ID_STATUS_ONTHEPHONE:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status onthephone\n");
+				break;
+			case ID_STATUS_OUTTOLUNCH:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status outtolunch\n");
+				break;
+			default:
+				DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read enter status unknown\n");
+				break;
+			}
+#endif
+			BOOL isAccountCounting = 0;
+			if(
+				(ActualAccount->Flags & YAMN_ACC_ENA) &&
+				(((ActualAccount->StatusFlags & YAMN_ACC_ST0) && (Status<=ID_STATUS_OFFLINE)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST1) && (Status==ID_STATUS_ONLINE)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST2) && (Status==ID_STATUS_AWAY)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST3) && (Status==ID_STATUS_DND)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST4) && (Status==ID_STATUS_NA)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST5) && (Status==ID_STATUS_OCCUPIED)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST6) && (Status==ID_STATUS_FREECHAT)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST7) && (Status==ID_STATUS_INVISIBLE)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST8) && (Status==ID_STATUS_ONTHEPHONE)) ||
+				((ActualAccount->StatusFlags & YAMN_ACC_ST9) && (Status==ID_STATUS_OUTTOLUNCH))))
+			{
+
+				if((!ActualAccount->Interval && !ActualAccount->TimeLeft) || ActualAccount->Plugin->Fcn->TimeoutFcnPtr==NULL)
+				{
+					goto ChangeIsCountingStatusLabel;
+				}
+				if(ActualAccount->TimeLeft){
+					ActualAccount->TimeLeft--;
+					isAccountCounting = TRUE;
+				}
+#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"TimerProc:time left : %i\n",ActualAccount->TimeLeft);
+#endif
+				WindowList_BroadcastAsync(YAMNVar.MessageWnds,WM_YAMN_CHANGETIME,(WPARAM)ActualAccount,(LPARAM)ActualAccount->TimeLeft);
+				if(!ActualAccount->TimeLeft)
+				{
+					struct CheckParam ParamToPlugin={YAMN_CHECKVERSION,ThreadRunningEV,ActualAccount,YAMN_NORMALCHECK,(void *)0,NULL};
+					HANDLE NewThread;
+		
+					ActualAccount->TimeLeft=ActualAccount->Interval;
+					if(NULL==(NewThread=CreateThread(NULL,0,(YAMN_STANDARDFCN)ActualAccount->Plugin->Fcn->TimeoutFcnPtr,&ParamToPlugin,0,&tid)))
+					{
+#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read done\n");
+#endif
+						ReadDoneFcn(ActualAccount->AccountAccessSO);
+						continue;
+					}
+					else
+					{
+						WaitForSingleObject(ThreadRunningEV,INFINITE);
+						CloseHandle(NewThread);
+					}
+				}
+
+			}
+ChangeIsCountingStatusLabel:
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"TimerProc:ActualAccountSO-read done\n");
+#endif
+			if (((ActualAccount->isCounting)!=0)!=isAccountCounting){
+				ActualAccount->isCounting=isAccountCounting;
+				WORD cStatus = DBGetContactSettingWord(ActualAccount->hContact,ProtoName,"Status",0);
+				switch (cStatus){
+					case ID_STATUS_ONLINE:
+					case ID_STATUS_OFFLINE:
+						DBWriteContactSettingWord(ActualAccount->hContact, ProtoName, "Status", isAccountCounting?ID_STATUS_ONLINE:ID_STATUS_OFFLINE);
+					default: break;
+				}
+			}
+			ReadDoneFcn(ActualAccount->AccountAccessSO);
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"TimerProc:AccountBrowserSO-read done\n");
+#endif
+		SWMRGDoneReading(ActualPlugin->Plugin->AccountBrowserSO);
+	}
+	LeaveCriticalSection(PluginRegCS);
+	CloseHandle(ThreadRunningEV);
+	return;
+}
+
+INT_PTR ForceCheckSvc(WPARAM,LPARAM)
+{
+	PYAMN_PROTOPLUGINQUEUE ActualPlugin;
+	HACCOUNT ActualAccount;
+	HANDLE ThreadRunningEV;
+	DWORD tid;
+
+	//we use event to signal, that running thread has all needed stack parameters copied
+	if(NULL==(ThreadRunningEV=CreateEvent(NULL,FALSE,FALSE,NULL)))
+		return 0;
+	//if we want to close miranda, we get event and do not run pop3 checking anymore
+	if(WAIT_OBJECT_0==WaitForSingleObject(ExitEV,0))
+		return 0;
+	EnterCriticalSection(PluginRegCS);
+	for(ActualPlugin=FirstProtoPlugin;ActualPlugin!=NULL;ActualPlugin=ActualPlugin->Next)
+	{
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"ForceCheck:AccountBrowserSO-read wait\n");
+		#endif                                                                        
+		SWMRGWaitToRead(ActualPlugin->Plugin->AccountBrowserSO,INFINITE);
+		#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"ForceCheck:AccountBrowserSO-read enter\n");
+		#endif
+		for(ActualAccount=ActualPlugin->Plugin->FirstAccount;ActualAccount!=NULL;ActualAccount=ActualAccount->Next)
+		{
+			if(ActualAccount->Plugin->Fcn==NULL)		//account not inited
+				continue;
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read wait\n");
+			#endif
+			if(WAIT_OBJECT_0!=WaitToReadFcn(ActualAccount->AccountAccessSO))
+			{
+				#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read wait failed\n");
+				#endif
+				continue;
+			}
+			#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"ForceCheck:ActualAccountSO-read enter\n");
+			#endif
+			if((ActualAccount->Flags & YAMN_ACC_ENA) && (ActualAccount->StatusFlags & YAMN_ACC_FORCE))			//account cannot be forced to check
+			{
+				if(ActualAccount->Plugin->Fcn->ForceCheckFcnPtr==NULL)
+				{
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+					continue;
+				}
+				struct CheckParam ParamToPlugin={YAMN_CHECKVERSION,ThreadRunningEV,ActualAccount,YAMN_FORCECHECK,(void *)0,NULL};
+
+				if(NULL==CreateThread(NULL,0,(YAMN_STANDARDFCN)ActualAccount->Plugin->Fcn->ForceCheckFcnPtr,&ParamToPlugin,0,&tid))
+				{
+					ReadDoneFcn(ActualAccount->AccountAccessSO);
+					continue;
+				}
+				else
+					WaitForSingleObject(ThreadRunningEV,INFINITE);
+			}
+			ReadDoneFcn(ActualAccount->AccountAccessSO);
+		}
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"ForceCheck:AccountBrowserSO-read done\n");
+#endif
+		SWMRGDoneReading(ActualPlugin->Plugin->AccountBrowserSO);
+	}
+	LeaveCriticalSection(PluginRegCS);
+	CloseHandle(ThreadRunningEV);
+	CallService(MS_TTB_SETBUTTONSTATE,(WPARAM)hTTButton,(LPARAM)TTBST_RELEASED);
+	return 1;
+}
+/*
+int ExitProc(WPARAM wParam,LPARAM lParam)
+{
+	THIS WILL BE IMPLEMENTED LATER
+//	First, no thread must add or delete accounts. This is achieved by entering browsing through accounts
+//	If any thread want to delete or add, it waits for write-access to browse accounts (so it waits infinite time)
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ExitProc:AccountBrowserSO-wait to obtain read access\n"));
+#endif
+	if(WAIT_TIMEOUT==SWMRGWaitToRead(AccountBrowserSO,0))
+	{
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"ExitProc:AccountBrowserSO-read access obtain failed, I'll try later\n"));
+#endif
+		return 1;
+	}
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ExitProc:AccountBrowserSO-read access obtained\n"));
+#endif
+#ifdef DEBUG_SYNCHRO
+	TCHAR Debug[100];
+
+	_stprintf(Debug,_T("ExitProc:Writers: %d\n"),AccountWriterSO->GetNumber());
+	DEBUG_SYNCHRO2F(Debug);
+	DebugLog(SynchroFile,"ExitProc:NoWriterEV-test\n"));
+#endif
+//	next, threads must not write to any account. This works like hFinishEV event in AccountAccessSO and MessagesAccessSO.
+//	When hFinishEV is set, any beginning with reading and writing to account (messages) is failed.
+//	This is similar, but the difference is, that we can finish the whole work (we can decide: if ExitEV is set, should we
+//	end immidialtelly or should we continue (to end operation successfully)?
+//	E.g. I decided that once we started checking account, we get all new mails and then we can end.
+//	The second and more significant difference is, that ExitEV is signal to all accounts and messages, not only to one account.
+
+	SetEvent(ExitEV);
+	if(WAIT_TIMEOUT==WaitForSingleObject(AccountWriterSO->Event,0))
+	{
+//	There exists a thread writing to account, so we ca try later to write accounts to file, if no thread is writting
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"ExitProc:NoWriterEV-writer(s) exists, I'll try later\n"));
+#endif
+		SWMRGDoneReading(AccountBrowserSO);
+		return 1;
+	}
+
+#ifdef DEBUG_SYNCHRO
+	DebugLog(SynchroFile,"ExitProc:NoWriterEV-no writer, going to save!\n"));
+#endif
+//	Save to file
+	WriteAccountsToFile();
+	SWMRGDoneReading(AccountBrowserSO);
+//	Now, all is saved, we can safe exit from Miranda
+	return 0;	
+}
+*/
+/*
+DWORD WINAPI FileWritingThread(PVOID)
+{
+	HACCOUNT ActualAccount=FirstAccount;
+
+	while(1)
+	{
+		WaitForSingleObject(WriteToFileEV,INFINITE);
+#ifdef DEBUG_SYNCHRO
+		DebugLog(SynchroFile,"FileWriting:WriteToFileEV-signaled\n"));
+#endif
+//	now, write accounts and messages if it is possible. If it is not possible e.g. to read messages from one account,
+//	function will wait until messages are not used and then writes messages
+		WriteAccountsToFile();
+	}
+	return 0;
+}
+*/
diff --git a/plugins/YAMN/yamn.h b/plugins/YAMN/yamn.h
new file mode 100644
index 0000000000..d8afa9aac6
--- /dev/null
+++ b/plugins/YAMN/yamn.h
@@ -0,0 +1,179 @@
+#ifndef __YAMN_H
+#define __YAMN_H
+#ifndef _WIN32_IE
+	#define _WIN32_IE 0x0400
+#endif
+#ifndef _WIN32_WINNT
+	#define _WIN32_WINNT 0x0501
+#endif
+
+#if !defined(_WIN64)
+	#include "filter/simple/AggressiveOptimize.h"
+#endif
+#include <wchar.h>
+#include <tchar.h>
+#include <windows.h>
+#include <stdio.h>
+#include <direct.h>			//For _chdir()
+
+#define MIRANDA_VER 0x0A00
+
+#include <commctrl.h>		//For hotkeys
+#include "win2k.h"
+#include "newpluginapi.h"	//CallService,UnHookEvent
+#include "m_utils.h"		//window broadcasting
+#include "m_system.h"
+#include "m_skin.h"
+#include "m_langpack.h"
+#include "m_clist.h"
+#include "m_clui.h"
+#include "m_options.h"
+#include "m_database.h"		//database
+#include "m_contacts.h"		//contact
+#include "m_protocols.h"	//protocols
+#include "m_protomod.h"		//protocols module
+#include "m_protosvc.h"
+#include "m_uninstaller.h"		//PluginUninstaller structures
+#include "m_toptoolbar.h"
+#include "m_icolib.h"
+#include "m_kbdnotify.h"
+#include "m_popup.h"
+#include "m_updater.h"
+#include "m_account.h"	//Account structure and all needed structures to cooperate with YAMN
+#include "m_messages.h"	//Messages sent to YAMN windows
+#include "mails/m_mails.h"	//use YAMN's mails
+#include "mails/m_decode.h"	//use decoding macros (needed for header extracting)
+#include "browser/m_browser.h"	//we want to run YAMN mailbrowser, no new mail notification and bad connect window
+#include "resources/resource.h"
+#include "m_protoplugin.h"
+#include "m_filterplugin.h"
+#include "m_yamn.h"	//Main YAMN's variables
+#include "m_protoplugin.h"	//Protocol registration and so on
+#include "m_synchro.h"	//Synchronization
+#include "debug.h"
+#include <m_folders.h>
+
+
+//icons definitions
+#define ICONSNUMBER 8
+#define ICONSDESCS "Neutral","YAMN","New Mail","Connect Fail","Launch Application","TopToolBar UP","TopToolBar Down","Offline"
+#define ICONSNAMES "YAMN_Neutral",iconDescs[1],"YAMN_NewMail","YAMN_ConnectFail","YAMN_ApplExec","YAMN_TopToolBarUp","YAMN_TopToolBarDown","YAMN_Offline"
+#define ICONSINDS IDI_ONLINE,IDI_ICOYAMN1,IDI_ICOYAMN2,IDI_NA,IDI_OCCUPIED,IDI_ICOTTBUP,IDI_OCCUPIED,IDI_OFFLINE
+
+//From services.cpp
+void CreateServiceFunctions(void);
+void DestroyServiceFunctions(void);
+void HookEvents(void);
+void UnhookEvents(void);
+void RefreshContact(void);
+void ContactDoubleclicked(WPARAM wParam,LPARAM lParam);
+INT_PTR ClistContactDoubleclicked(WPARAM wParam, LPARAM lParam);
+
+//From debug.cpp
+#undef YAMN_DEBUG
+#ifdef YAMN_DEBUG
+void InitDebug();
+void UnInitDebug();
+#endif
+
+//From synchro.cpp
+//struct CExportedFunctions SynchroExported[];
+
+//From yamn.cpp
+INT_PTR GetFcnPtrSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR GetVariablesSvc(WPARAM,LPARAM);
+//INT_PTR AddWndToYAMNWindowsSvc(WPARAM,LPARAM);
+//INT_PTR RemoveWndFromYAMNWindowsSvc(WPARAM,LPARAM);
+DWORD WINAPI YAMNHotKeyThread(LPVOID);
+void CALLBACK TimerProc(HWND,UINT,UINT,DWORD);
+INT_PTR ForceCheckSvc(WPARAM,LPARAM);
+// int ExitProc(WPARAM,LPARAM);
+
+//From account.cpp
+//struct CExportedFunctions AccountExported[];
+INT_PTR CreatePluginAccountSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR DeletePluginAccountSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR WriteAccountsToFileASvc(WPARAM wParam,LPARAM lParam);
+INT_PTR WriteAccountsToFileWSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR AddAccountsFromFileASvc(WPARAM,LPARAM);
+INT_PTR AddAccountsFromFileWSvc(WPARAM,LPARAM);
+INT_PTR DeleteAccountSvc(WPARAM,LPARAM);
+INT_PTR FindAccountByNameSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR GetNextFreeAccountSvc(WPARAM wParam,LPARAM lParam);
+
+//From protoplugin.cpp
+//struct CExportedFunctions ProtoPluginExported[];
+INT_PTR UnregisterProtoPlugins();
+INT_PTR RegisterProtocolPluginSvc(WPARAM,LPARAM);
+INT_PTR UnregisterProtocolPluginSvc(WPARAM,LPARAM);
+INT_PTR GetFileNameWSvc(WPARAM,LPARAM);
+INT_PTR GetFileNameASvc(WPARAM,LPARAM);
+INT_PTR DeleteFileNameSvc(WPARAM,LPARAM);
+
+//From filterplugin.cpp
+//struct CExportedFunctions FilterPluginExported[];
+INT_PTR UnregisterFilterPlugins();
+INT_PTR RegisterFilterPluginSvc(WPARAM,LPARAM);
+INT_PTR UnregisterFilterPluginSvc(WPARAM,LPARAM);
+INT_PTR FilterMailSvc(WPARAM,LPARAM);
+
+//From mails.cpp (MIME)
+//struct CExportedFunctions MailExported[];
+INT_PTR CreateAccountMailSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR DeleteAccountMailSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR LoadMailDataSvc(WPARAM wParam,LPARAM lParam);
+INT_PTR UnloadMailDataSvc(WPARAM wParam,LPARAM);
+INT_PTR SaveMailDataSvc(WPARAM wParam,LPARAM lParam);
+
+//From mime.cpp
+//void WINAPI ExtractHeaderFcn(char *,int,WORD,HYAMNMAIL);	//already in MailExported
+struct _tcptable
+{
+	char *NameBase,*NameSub;
+	BOOLEAN isValid;
+	unsigned short int CP;
+};
+extern struct _tcptable CodePageNamesAll[]; // in mime/decode.cpp
+extern int CPLENALL;
+extern struct _tcptable *CodePageNamesSupp; // in mime/decode.cpp
+extern int CPLENSUPP;
+//#define CPDEFINDEX	63	//ISO-8859-1
+#define CPDEFINDEX	0	//ACP
+
+//From pop3comm.cpp
+int RegisterPOP3Plugin(WPARAM,LPARAM);
+int UninstallPOP3(PLUGINUNINSTALLPARAMS* ppup);			//to uninstall POP3 plugin with YAMN
+
+//From mailbrowser.cpp
+INT_PTR RunMailBrowserSvc(WPARAM,LPARAM);
+
+//From badconnect.cpp
+INT_PTR RunBadConnectionSvc(WPARAM,LPARAM);
+
+//From YAMNopts.cpp
+void WordToModAndVk(WORD,UINT *,UINT *);
+int YAMNOptInitSvc(WPARAM,LPARAM);
+
+//From main.cpp
+int PostLoad(WPARAM,LPARAM);				//Executed after all plugins loaded YAMN reads mails from file and notify every protocol it should set its functions
+int Shutdown(WPARAM,LPARAM);				//Executed before Miranda is going to shutdown
+int AddTopToolbarIcon(WPARAM,LPARAM);		//Executed when TopToolBar plugin loaded Adds bitmap to toolbar
+void LoadPlugins();							//Loads plugins located in MirandaDir/Plugins/YAMN/*.dll
+int UninstallQuestionSvc(WPARAM,LPARAM);	//Ask information when user wants to uninstall plugin
+
+//From synchro.cpp
+extern DWORD WINAPI WaitToWriteFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+extern void WINAPI WriteDoneFcn(PSWMRG SObject,PSCOUNTER SCounter=NULL);
+extern DWORD WINAPI WaitToReadFcn(PSWMRG SObject);
+extern void WINAPI ReadDoneFcn(PSWMRG SObject);
+extern DWORD WINAPI SCIncFcn(PSCOUNTER SCounter);
+extern DWORD WINAPI SCDecFcn(PSCOUNTER SCounter);
+//From mails.cpp
+extern void WINAPI DeleteMessageFromQueueFcn(HYAMNMAIL *From,HYAMNMAIL Which,int mode);
+extern void WINAPI SetRemoveFlagsInQueueFcn(HYAMNMAIL From,DWORD FlagsSet,DWORD FlagsNotSet,DWORD FlagsToSet,int mode);
+//From mime.cpp
+void ExtractHeader(struct CMimeItem *items,int &CP,struct CHeader *head);
+void DeleteHeaderContent(struct CHeader *head);
+//From account.cpp
+void WINAPI GetStatusFcn(HACCOUNT Which,char *Value);
+#endif
-- 
cgit v1.2.3