diff --git a/admin/win/README.txt b/admin/win/README.txt
deleted file mode 100755
index e69de29bb..000000000
diff --git a/admin/win/nsi/RELEASE_NOTES.txt b/admin/win/nsi/RELEASE_NOTES.txt
old mode 100755
new mode 100644
diff --git a/admin/win/nsi/installer.ico b/admin/win/nsi/installer.ico
old mode 100755
new mode 100644
diff --git a/admin/win/nsi/nsis_processes/bin/Processes.dll b/admin/win/nsi/nsis_processes/bin/Processes.dll
new file mode 100755
index 000000000..e532bf8bb
Binary files /dev/null and b/admin/win/nsi/nsis_processes/bin/Processes.dll differ
diff --git a/admin/win/nsi/nsis_processes/license.rtf b/admin/win/nsi/nsis_processes/license.rtf
new file mode 100755
index 000000000..2ce5a58c9
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/license.rtf
@@ -0,0 +1,35 @@
+{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}
+{\f172\froman\fcharset238\fprq2 Times New Roman CE;}{\f173\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f175\froman\fcharset161\fprq2 Times New Roman Greek;}{\f176\froman\fcharset162\fprq2 Times New Roman Tur;}
+{\f177\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f178\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f179\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f180\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
+{\f562\fswiss\fcharset238\fprq2 Verdana CE;}{\f563\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f565\fswiss\fcharset161\fprq2 Verdana Greek;}{\f566\fswiss\fcharset162\fprq2 Verdana Tur;}{\f569\fswiss\fcharset186\fprq2 Verdana Baltic;}
+{\f570\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
+\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv 
+\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\*\cs15 \additive \ul\cf2 \sbasedon10 \styrsid7485074 Hyperlink;}}
+{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\rsidtbl \rsid6712196\rsid7485074\rsid11352300\rsid15940516}{\*\generator Microsoft Word 11.0.5604;}{\info{\title Processes v1}{\author Hardwired}{\operator Hardwired}{\creatim\yr2004\mo12\dy12\hr23\min42}
+{\revtim\yr2004\mo12\dy12\hr23\min51}{\version2}{\edmins9}{\nofpages1}{\nofwords80}{\nofchars458}{\nofcharsws537}{\vern24689}}\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180
+\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1
+\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
+\asianbrkrule\rsidroot7485074\newtblstyruls\nogrowautofit \fet0\sectd \linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}
+{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}
+{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain 
+\qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7485074 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b\f39\insrsid7485074\charrsid7485074 Processes v1.0}{\f39\insrsid7485074\charrsid7485074 .0.1
+\par }{\f39\fs20\insrsid7485074 
+\par }\pard \qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15940516 {\f39\fs20\insrsid15940516 This software binaries and source-code are free for any kind of use, including commercial use. }{
+\f39\fs20\insrsid7485074\charrsid7485074 There is no restriction and no guaranty for using}{\f39\fs20\insrsid7485074\charrsid7485074  t}{\f39\fs20\insrsid7485074\charrsid7485074 his software}{\f39\fs20\insrsid7485074\charrsid7485074  and/or it
+s source-code. }{\f39\fs20\insrsid15940516 
+\par I}{\f39\fs20\insrsid7485074\charrsid7485074 f you use the plug}{\f39\fs20\insrsid7485074\charrsid7485074 -}{\f39\fs20\insrsid7485074\charrsid7485074 in }{\f39\fs20\insrsid7485074\charrsid7485074 and/}{\f39\fs20\insrsid7485074\charrsid7485074 or it}{
+\f39\fs20\insrsid7485074\charrsid7485074 s}{\f39\fs20\insrsid7485074\charrsid7485074  source-code, I would }{\f39\fs20\insrsid7485074\charrsid7485074 appreciate }{\f39\fs20\insrsid7485074\charrsid7485074 if my name is mentioned.}{
+\f39\fs20\insrsid7485074\charrsid7485074 
+\par }\pard \qj \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7485074 {\f39\fs20\insrsid7485074\charrsid7485074 
+\par }{\b\f39\fs20\insrsid7485074\charrsid7485074 Andrei Ciubotaru [Hardwired]
+\par }{\f39\fs20\insrsid7485074\charrsid7485074 Lead Developer ICode&Ideas SRL (}{\field\flddirty{\*\fldinst {\f39\fs20\insrsid7485074\charrsid7485074  HYPERLINK "http://www.icode.ro/" }{\f39\fs20\insrsid7485074\charrsid7485074 {\*\datafield 
+00d0c9ea79f9bace118c8200aa004ba90b02000000170000001500000068007400740070003a002f002f007700770077002e00690063006f00640065002e0072006f002f000000e0c9ea79f9bace118c8200aa004ba90b2a00000068007400740070003a002f002f007700770077002e00690063006f00640065002e007200
+6f002f000000}}}{\fldrslt {\cs15\f39\fs20\ul\cf2\insrsid7485074\charrsid7485074 http://www.icode.ro/}}}{\f39\fs20\insrsid7485074\charrsid7485074 )
+\par }{\field{\*\fldinst {\f39\fs20\insrsid7485074  HYPERLINK "hardwiredteks@gmail.com" }{\f39\fs20\insrsid15940516\charrsid7485074 {\*\datafield 
+00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c00000000000004600001800000068617264776972656474656b7340676d61696c2e636f6d00ffffadde000000000000000000000000000000000000000000000000}}}{\fldrslt {
+\cs15\f39\fs20\ul\cf2\insrsid7485074\charrsid7485074 hardwiredteks@gmail.com}}}{\f39\fs20\insrsid7485074\charrsid7485074 , }{\field{\*\fldinst {\f39\fs20\insrsid7485074  HYPERLINK "hardwired@icode.ro" }{\f39\fs20\insrsid15940516\charrsid7485074 
+{\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b02000000010000000303000000000000c0000000000000460000130000006861726477697265644069636f64652e726f00ffffadde000000000000000000000000000000000000000000000000}}}{\fldrslt {
+\cs15\f39\fs20\ul\cf2\insrsid7485074\charrsid7485074 hardwired@icode.ro}}}{\f39\fs20\insrsid7485074\charrsid7485074 
+\par }}
\ No newline at end of file
diff --git a/admin/win/nsi/nsis_processes/readme.txt b/admin/win/nsi/nsis_processes/readme.txt
new file mode 100755
index 000000000..8529c39ad
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/readme.txt
@@ -0,0 +1,122 @@
+----------------------------------------------------------------
+----------------------------------------------------------------
+Processes (Processes.dll)
+Version:	1.0.1.0
+Release:	24.february.2005
+Description:	Nullsoft Installer (NSIS) plug-in for managing?! 
+		Windows processes.
+
+Copyright:	� 2004-2005 Hardwired. No rights reserved.
+		There is no restriction and no guaranty for using
+		this software.
+
+Author:		Andrei Ciubotaru [Hardwired]
+		Lead Developer ICode&Ideas SRL (http://www.icode.ro/)
+		hardwiredteks@gmail.com, hardwired@icode.ro
+
+----------------------------------------------------------------
+----------------------------------------------------------------
+INTRODUCTION
+
+	The Need For Plug-in - I need it for the one of my installers.
+	
+	Briefly: Use it when you need to find\kill a process when
+installing\uninstalling some application. Also, use it when you 
+need to test the presence of a device driver.
+
+
+SUPPORT
+	
+	Supported platforms are: WinNT,Win2K,WinXP and Win2003 Server.
+
+
+DESCRIPTION
+
+	Processes::FindProcess <process_name>	;without ".exe"
+	
+		Searches the currently running processes for the given
+		process name.
+		
+		return:	1	- the process was found
+			0	- the process was not found
+	
+	Processes::KillProcess <process_name>	; without ".exe"
+	
+		Searches the currently running processes for the given
+		process name. If the process is found then the it gets
+		killed.
+		
+		return:	1	- the process was found and killed
+			0	- the process was not found or the process
+						cannot be killed (insuficient rights)
+	
+	Processes::FindDevice <device_base_name>
+	
+		Searches the installed devices drivers for the given
+		device base name.
+		(important: I said BASE NAME not FILENAME)
+		
+		return:	1	- the device driver was found
+			0	- the device driver was not found
+				
+
+USAGE
+
+	First of all, does not matter where you use it. Ofcourse, the
+routines must be called inside of a Section/Function scope.
+
+	Processes::FindProcess "process_name"
+	Pop $R0
+ 
+	StrCmp $R0 "1" make_my_day noooooo
+	
+	make_my_day:
+		...
+	
+	noooooo:
+		...
+		
+	
+	Processes::KillProcess "process_name"
+	Pop $R0
+ 
+	StrCmp $R0 "1" dead_meat why_wont_you_die
+	
+	dead_meat:
+		...
+	
+	why_wont_you_die:
+		...
+		
+
+	Processes::FindDevice "device_base_name"
+	Pop $R0
+ 
+	StrCmp $R0 "1" blabla more_blabla
+	
+	blabla:
+		...
+	
+	more_blabla:
+		...
+		
+	
+THANKS
+
+	Sunil Kamath for inspiring me. I wanted to use its FindProcDLL
+but my requirements made it imposible.
+
+	Nullsoft for creating this very powerfull installer. One big,
+free and full-featured (hmmm... and guiless for the moment) mean
+install machine!:)
+
+	ME for being such a great coder...
+						... HAHAHAHAHAHAHA!
+										
+ONE MORE THING
+
+	If you use the plugin or it's source-code, I would apreciate
+if my name is mentioned.
+
+----------------------------------------------------------------
+----------------------------------------------------------------
diff --git a/admin/win/nsi/nsis_processes/src/StdAfx.cpp b/admin/win/nsi/nsis_processes/src/StdAfx.cpp
new file mode 100755
index 000000000..f38accc8a
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/StdAfx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+//	KillProcDLL.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/admin/win/nsi/nsis_processes/src/StdAfx.h b/admin/win/nsi/nsis_processes/src/StdAfx.h
new file mode 100755
index 000000000..dd49f99b9
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/StdAfx.h
@@ -0,0 +1,34 @@
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__780690DC_E128_403D_BC07_780D1B2CC101__INCLUDED_)
+#define AFX_STDAFX_H__780690DC_E128_403D_BC07_780D1B2CC101__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <windows.h>
+
+#include <string> // String management...
+
+//From exam28.cpp
+#include <tlhelp32.h>
+//#include <iostream.h>
+
+#ifdef BORLANDC
+  #include <string.h>
+  #include <ctype.h>
+#endif
+
+//To make it a NSIS Plug-In
+#include "exdll.h"
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__780690DC_E128_403D_BC07_780D1B2CC101__INCLUDED_)
diff --git a/admin/win/nsi/nsis_processes/src/exdll.c b/admin/win/nsi/nsis_processes/src/exdll.c
new file mode 100755
index 000000000..7092cb840
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/exdll.c
@@ -0,0 +1,37 @@
+#include <windows.h>
+#include "exdll.h"
+
+HINSTANCE g_hInstance;
+
+HWND g_hwndParent;
+
+void __declspec(dllexport) myFunction(HWND hwndParent, int string_size, 
+                                      char *variables, stack_t **stacktop)
+{
+  g_hwndParent=hwndParent;
+
+  EXDLL_INIT();
+
+
+  // note if you want parameters from the stack, pop them off in order.
+  // i.e. if you are called via exdll::myFunction file.dat poop.dat
+  // calling popstring() the first time would give you file.dat,
+  // and the second time would give you poop.dat. 
+  // you should empty the stack of your parameters, and ONLY your
+  // parameters.
+
+  // do your stuff here
+  {
+    char buf[1024];
+    wsprintf(buf,"$0=%s\n",getuservariable(INST_0));
+    MessageBox(g_hwndParent,buf,0,MB_OK);
+  }
+}
+
+
+
+BOOL WINAPI _DllMainCRTStartup(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
+{
+  g_hInstance=hInst;
+	return TRUE;
+}
diff --git a/admin/win/nsi/nsis_processes/src/exdll.h b/admin/win/nsi/nsis_processes/src/exdll.h
new file mode 100755
index 000000000..777d93be5
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/exdll.h
@@ -0,0 +1,136 @@
+#ifndef _EXDLL_H_
+#define _EXDLL_H_
+
+
+
+
+
+//
+// only include this file from one place in your DLL.
+// (it is all static, if you use it in two places it will fail)
+//
+#define EXDLL_INIT()           {  \
+        g_stringsize	= string_size; \
+        g_stacktop		= stacktop;      \
+        g_variables		= variables; }
+
+
+
+
+//
+// For page showing plug-ins
+//
+#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
+#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
+#define NOTIFY_BYE_BYE 'x'
+
+typedef struct _stack_t 
+{
+  struct _stack_t	*next;
+  char				text[1]; // this should be the length of string_size
+} stack_t;
+
+
+static unsigned int		g_stringsize;
+static stack_t			**g_stacktop;
+static char				*g_variables;
+
+enum
+{
+INST_0,         // $0
+INST_1,         // $1
+INST_2,         // $2
+INST_3,         // $3
+INST_4,         // $4
+INST_5,         // $5
+INST_6,         // $6
+INST_7,         // $7
+INST_8,         // $8
+INST_9,         // $9
+INST_R0,        // $R0
+INST_R1,        // $R1
+INST_R2,        // $R2
+INST_R3,        // $R3
+INST_R4,        // $R4
+INST_R5,        // $R5
+INST_R6,        // $R6
+INST_R7,        // $R7
+INST_R8,        // $R8
+INST_R9,        // $R9
+INST_CMDLINE,   // $CMDLINE
+INST_INSTDIR,   // $INSTDIR
+INST_OUTDIR,    // $OUTDIR
+INST_EXEDIR,    // $EXEDIR
+INST_LANG,      // $LANGUAGE
+__INST_LAST
+};
+
+
+
+
+
+//
+// utility functions (not required but often useful)
+//
+static int popstring( char *str )
+{
+  stack_t	*th;
+
+
+  if( !g_stacktop || 
+	  !*g_stacktop )
+	  return 1;
+
+  th			= (*g_stacktop);
+  lstrcpy( str, th->text );
+  *g_stacktop	= th->next;
+  GlobalFree( (HGLOBAL)th );
+
+  return 0;
+}
+
+
+
+
+static void pushstring( char *str )
+{
+  stack_t	*th;
+
+
+  if( !g_stacktop )
+	  return;
+
+  th			= (stack_t*)GlobalAlloc( GPTR, sizeof(stack_t) + g_stringsize );
+  lstrcpyn( th->text, str, g_stringsize );
+  th->next		= *g_stacktop;
+  *g_stacktop	= th;
+}
+
+
+
+
+
+static char *getuservariable( int varnum )
+{
+  if( varnum < 0 || 
+	  varnum >= __INST_LAST )
+	  return NULL;
+
+  return (g_variables + varnum*g_stringsize);
+}
+
+
+
+
+
+static void setuservariable( int varnum, char *var )
+{
+	if( var != NULL && 
+		varnum >= 0 && 
+		varnum < __INST_LAST ) 
+		lstrcpy( g_variables + varnum*g_stringsize, var );
+}
+
+
+
+#endif//_EXDLL_H_
\ No newline at end of file
diff --git a/admin/win/nsi/nsis_processes/src/processes.cpp b/admin/win/nsi/nsis_processes/src/processes.cpp
new file mode 100755
index 000000000..c15f8f94a
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/processes.cpp
@@ -0,0 +1,411 @@
+#include "stdafx.h"
+#include "processes.h"
+#include "string.h"
+
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// global variables
+lpfEnumProcesses			EnumProcesses;
+lpfEnumProcessModules		EnumProcessModules;
+lpfGetModuleBaseName		GetModuleBaseName;
+lpfEnumDeviceDrivers		EnumDeviceDrivers;
+lpfGetDeviceDriverBaseName	GetDeviceDriverBaseName;
+
+HINSTANCE					g_hInstance;
+HWND						g_hwndParent;
+HINSTANCE					g_hInstLib;
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// main DLL entry
+BOOL WINAPI		_DllMainCRTStartup( HANDLE	hInst, 
+									ULONG	ul_reason_for_call,
+									LPVOID	lpReserved )
+{
+    g_hInstance		= (struct HINSTANCE__ *)hInst;
+
+    return TRUE;
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// loads the psapi routines
+bool	LoadPSAPIRoutines( void )
+{
+	if( NULL == (g_hInstLib = LoadLibraryA( "PSAPI.DLL" )) )
+		return false;
+
+	EnumProcesses			= (lpfEnumProcesses)			GetProcAddress( g_hInstLib, "EnumProcesses" );
+	EnumProcessModules		= (lpfEnumProcessModules)		GetProcAddress( g_hInstLib, "EnumProcessModules" );
+	GetModuleBaseName		= (lpfGetModuleBaseName)		GetProcAddress( g_hInstLib, "GetModuleBaseNameA" );
+	EnumDeviceDrivers		= (lpfEnumDeviceDrivers)		GetProcAddress( g_hInstLib, "EnumDeviceDrivers" );
+	GetDeviceDriverBaseName	= (lpfGetDeviceDriverBaseName)	GetProcAddress( g_hInstLib, "GetDeviceDriverBaseNameA" );
+
+	if( ( NULL == EnumProcesses ) ||
+		( NULL == EnumProcessModules ) ||
+		( NULL == EnumDeviceDrivers ) ||
+		( NULL == GetModuleBaseName ) ||
+		( NULL == GetDeviceDriverBaseName ) )
+	{
+		FreeLibrary( g_hInstLib );
+
+		return false;
+	}
+
+	return true;
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// free the psapi routines
+bool	FreePSAPIRoutines( void )
+{
+	EnumProcesses		= NULL;
+	EnumProcessModules	= NULL;
+	GetModuleBaseName	= NULL;
+	EnumDeviceDrivers	= NULL;
+
+	if( FALSE == FreeLibrary( g_hInstLib ) )
+		return false;
+
+	return true;
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// find a process by name
+// return value:	true	- process was found
+//					false	- process not found
+bool	FindProc( char *szProcess )
+{
+	char		szProcessName[ 1024 ];
+	char		szCurrentProcessName[ 1024 ];
+	DWORD		dPID[ 1024 ];
+	DWORD		dPIDSize( 1024 );
+	DWORD		dSize( 1024 );
+	HANDLE		hProcess;
+	HMODULE		phModule[ 1024 ];
+
+  
+	//
+	// make the name lower case
+	//
+	memset( szProcessName, 0, 1024*sizeof(char) );
+	sprintf( szProcessName, "%s", szProcess );
+	strlwr( szProcessName );
+
+	//
+    // load PSAPI routines
+	//
+	if( false == LoadPSAPIRoutines() )
+		return false;
+
+	//
+	// enumerate processes names
+	//
+    if( FALSE == EnumProcesses( dPID, dSize, &dPIDSize ) )
+	{
+		FreePSAPIRoutines();
+
+		return false;
+	}
+
+	//
+	// walk trough and compare see if the process is running
+	//
+	for( int k( dPIDSize / sizeof( DWORD ) ); k >= 0; k-- )
+	{
+		memset( szCurrentProcessName, 0, 1024*sizeof(char) );
+
+		if( NULL != ( hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dPID[ k ] ) ) )
+		{
+			if( TRUE == EnumProcessModules( hProcess, phModule, sizeof(HMODULE)*1024, &dPIDSize ) )
+				if( GetModuleBaseName( hProcess, phModule[ 0 ], szCurrentProcessName, 1024 ) > 0 )
+				{
+					strlwr( szCurrentProcessName );
+
+					if( NULL != strstr( szCurrentProcessName, szProcessName ) )
+					{
+						FreePSAPIRoutines();
+						CloseHandle( hProcess );
+
+						return true;
+					}
+				}
+
+			CloseHandle( hProcess );
+		}
+	}
+	
+	//
+	// free PSAPI routines
+	//
+	FreePSAPIRoutines();
+
+	return false;
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// kills a process by name
+// return value:	true	- process was found
+//					false	- process not found
+bool	KillProc( char *szProcess )
+{
+	char		szProcessName[ 1024 ];
+	char		szCurrentProcessName[ 1024 ];
+	DWORD		dPID[ 1024 ];
+	DWORD		dPIDSize( 1024 );
+	DWORD		dSize( 1024 );
+	HANDLE		hProcess;
+	HMODULE		phModule[ 1024 ];
+
+  
+	//
+	// make the name lower case
+	//
+	memset( szProcessName, 0, 1024*sizeof(char) );
+	sprintf( szProcessName, "%s", szProcess );
+	strlwr( szProcessName );
+
+	//
+    // load PSAPI routines
+	//
+	if( false == LoadPSAPIRoutines() )
+		return false;
+
+	//
+	// enumerate processes names
+	//
+    if( FALSE == EnumProcesses( dPID, dSize, &dPIDSize ) )
+	{
+		FreePSAPIRoutines();
+
+		return false;
+	}
+
+	//
+	// walk trough and compare see if the process is running
+	//
+	for( int k( dPIDSize / sizeof( DWORD ) ); k >= 0; k-- )
+	{
+		memset( szCurrentProcessName, 0, 1024*sizeof(char) );
+
+		if( NULL != ( hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dPID[ k ] ) ) )
+		{
+			if( TRUE == EnumProcessModules( hProcess, phModule, sizeof(HMODULE)*1024, &dPIDSize ) )
+				if( GetModuleBaseName( hProcess, phModule[ 0 ], szCurrentProcessName, 1024 ) > 0 )
+				{
+					strlwr( szCurrentProcessName );
+
+					if( NULL != strstr( szCurrentProcessName, szProcessName ) )
+					{
+						FreePSAPIRoutines();
+
+						//
+						// kill process
+						//
+						if( false == TerminateProcess( hProcess, 0 ) )
+						{
+							CloseHandle( hProcess );
+
+							return true;
+						}
+
+						//
+						// refresh systray
+						//
+						UpdateWindow( FindWindow( NULL, "Shell_TrayWnd" ) );
+
+						//
+						// refresh desktop window
+						//
+						UpdateWindow( GetDesktopWindow() );
+
+						CloseHandle( hProcess );
+
+						return true;
+					}
+				}
+
+			CloseHandle( hProcess );
+		}
+	}
+	
+	//
+	// free PSAPI routines
+	//
+	FreePSAPIRoutines();
+
+	return false;
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+bool	FindDev( char *szDriverName )
+{
+	char		szDeviceName[ 1024 ];
+	char		szCurrentDeviceName[ 1024 ];
+	LPVOID		lpDevices[ 1024 ];
+	DWORD		dDevicesSize( 1024 );
+	DWORD		dSize( 1024 );
+	TCHAR		tszCurrentDeviceName[ 1024 ];
+	DWORD		dNameSize( 1024 );
+
+  
+	//
+	// make the name lower case
+	//
+	memset( szDeviceName, 0, 1024*sizeof(char) );
+	sprintf( szDeviceName, "%s", strlwr( szDriverName ) );
+
+	//
+    // load PSAPI routines
+	//
+	if( false == LoadPSAPIRoutines() )
+		return false;
+
+	//
+	// enumerate devices
+	//
+    if( FALSE == EnumDeviceDrivers( lpDevices, dSize, &dDevicesSize ) )
+	{
+		FreePSAPIRoutines();
+
+		return false;
+	}
+
+	//
+	// walk trough and compare see if the device driver exists
+	//
+	for( int k( dDevicesSize / sizeof( LPVOID ) ); k >= 0; k-- )
+	{
+		memset( szCurrentDeviceName, 0, 1024*sizeof(char) );
+		memset( tszCurrentDeviceName, 0, 1024*sizeof(TCHAR) );
+
+		if( 0 != GetDeviceDriverBaseName( lpDevices[ k ], tszCurrentDeviceName, dNameSize ) )
+		{
+			sprintf( szCurrentDeviceName, "%S", tszCurrentDeviceName );
+
+			if( 0 == strcmp( strlwr( szCurrentDeviceName ), szDeviceName ) )
+			{
+				FreePSAPIRoutines();
+
+				return true;
+			}
+		}
+	}
+	
+	//
+	// free PSAPI routines
+	//
+	FreePSAPIRoutines();
+
+	return false;
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+extern "C" __declspec(dllexport) void	FindProcess( HWND		hwndParent, 
+													 int		string_size,
+													 char		*variables, 
+													 stack_t	**stacktop )
+{
+	char		szParameter[ 1024 ];
+
+
+	g_hwndParent	= hwndParent;
+
+	EXDLL_INIT();
+	{
+		popstring( szParameter );
+
+		if( true == FindProc( szParameter ) )
+			wsprintf( szParameter, "1" );
+		else
+			wsprintf( szParameter, "0" );
+
+		setuservariable( INST_R0, szParameter );
+	}
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+extern "C" __declspec(dllexport) void	KillProcess( HWND		hwndParent, 
+													 int		string_size,
+													 char		*variables, 
+													 stack_t	**stacktop )
+{
+	char		szParameter[ 1024 ];
+
+
+	g_hwndParent	= hwndParent;
+
+	EXDLL_INIT();
+	{
+		popstring( szParameter );
+
+		if( true == KillProc( szParameter ) )
+			wsprintf( szParameter, "1" );
+		else
+			wsprintf( szParameter, "0" );
+
+		setuservariable( INST_R0, szParameter );
+	}
+}
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+extern "C" __declspec(dllexport) void	FindDevice( HWND		hwndParent, 
+													 int		string_size,
+													 char		*variables, 
+													 stack_t	**stacktop )
+{
+	char		szParameter[ 1024 ];
+
+
+	g_hwndParent	= hwndParent;
+
+	EXDLL_INIT();
+	{
+		popstring( szParameter );
+
+		if( true == FindDev( szParameter ) )
+			wsprintf( szParameter, "1" );
+		else
+			wsprintf( szParameter, "0" );
+
+		setuservariable( INST_R0, szParameter );
+	}
+}
diff --git a/admin/win/nsi/nsis_processes/src/processes.h b/admin/win/nsi/nsis_processes/src/processes.h
new file mode 100755
index 000000000..9bd069101
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/processes.h
@@ -0,0 +1,49 @@
+#pragma once
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// PSAPI function pointers
+typedef BOOL	(WINAPI *lpfEnumProcesses)			( DWORD *, DWORD, DWORD * );
+typedef BOOL	(WINAPI *lpfEnumProcessModules)		( HANDLE, HMODULE *, DWORD, LPDWORD );
+typedef DWORD	(WINAPI *lpfGetModuleBaseName)		( HANDLE, HMODULE, LPTSTR, DWORD );
+typedef BOOL	(WINAPI *lpfEnumDeviceDrivers)		( LPVOID *, DWORD, LPDWORD );
+typedef BOOL	(WINAPI *lpfGetDeviceDriverBaseName)( LPVOID, LPTSTR, DWORD );
+
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// Internal use routines
+bool	LoadPSAPIRoutines( void );
+bool	FreePSAPIRoutines( void );
+
+bool	FindProc( char *szProcess );
+bool	KillProc( char *szProcess );
+
+bool	FindDev( char *szDriverName );
+
+
+
+
+
+//-------------------------------------------------------------------------------------------
+// Exported routines
+extern "C" __declspec(dllexport) void	FindProcess( HWND		hwndParent, 
+													 int		string_size,
+													 char		*variables, 
+													 stack_t	**stacktop );
+
+extern "C" __declspec(dllexport) void	KillProcess( HWND		hwndParent, 
+													 int		string_size,
+													 char		*variables, 
+													 stack_t	**stacktop );
+
+extern "C" __declspec(dllexport) void	FindDevice(  HWND		hwndParent, 
+													 int		string_size,
+													 char		*variables, 
+													 stack_t	**stacktop );
diff --git a/admin/win/nsi/nsis_processes/src/processes.ncb b/admin/win/nsi/nsis_processes/src/processes.ncb
new file mode 100755
index 000000000..c1a5f281f
Binary files /dev/null and b/admin/win/nsi/nsis_processes/src/processes.ncb differ
diff --git a/admin/win/nsi/nsis_processes/src/processes.rc b/admin/win/nsi/nsis_processes/src/processes.rc
new file mode 100755
index 000000000..c6e62a3c8
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/processes.rc
@@ -0,0 +1,103 @@
+// 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
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#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
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 1,0,0,1
+ PRODUCTVERSION 1,0,0,1
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "NSIS Plug-in for Windows process management. Only WinNT, Win2K, WinXP and Win2003 Server supported."
+            VALUE "CompanyName", "Andrei Ciubotaru [Hardwired]"
+            VALUE "FileDescription", "Windows Processes Management"
+            VALUE "FileVersion", "1, 0, 0, 1"
+            VALUE "InternalName", "Processes"
+            VALUE "LegalCopyright", "Copyright (c) 2004 Hardwired. No rights reserved."
+            VALUE "OriginalFilename", "Processes.dll"
+            VALUE "ProductName", "Processes"
+            VALUE "ProductVersion", "1, 0, 0, 1"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/admin/win/nsi/nsis_processes/src/processes.sln b/admin/win/nsi/nsis_processes/src/processes.sln
new file mode 100755
index 000000000..73fc989e2
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/processes.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "processes", "processes.vcproj", "{3438467F-A719-46DC-93E5-137A8B691727}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfiguration) = preSolution
+		Debug = Debug
+		Release = Release
+	EndGlobalSection
+	GlobalSection(ProjectConfiguration) = postSolution
+		{3438467F-A719-46DC-93E5-137A8B691727}.Debug.ActiveCfg = Debug|Win32
+		{3438467F-A719-46DC-93E5-137A8B691727}.Debug.Build.0 = Debug|Win32
+		{3438467F-A719-46DC-93E5-137A8B691727}.Release.ActiveCfg = Release|Win32
+		{3438467F-A719-46DC-93E5-137A8B691727}.Release.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
diff --git a/admin/win/nsi/nsis_processes/src/processes.txt b/admin/win/nsi/nsis_processes/src/processes.txt
new file mode 100755
index 000000000..51d11902a
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/processes.txt
@@ -0,0 +1,122 @@
+----------------------------------------------------------------
+----------------------------------------------------------------
+Processes (Processes.dll)
+Version:	1.0.0.1
+Release:	12.december.2004
+Description:Nullsoft Installer (NSIS) plug-in for managing?! 
+			Windows processes.
+
+Copyright:	� 2004 Hardwired. No rights reserved.
+			There is no restriction and no guaranty for using
+			this software.
+
+Author:		Andrei Ciubotaru [Hardwired]
+			Lead Developer ICode&Ideas SRL (http://www.icode.ro)
+			hardwiredteks@gmail.com, hardwired@icode.ro
+
+----------------------------------------------------------------
+----------------------------------------------------------------
+INTRODUCTION
+
+	The Need For Plug-in - I need it for the one of my installers.
+	
+	Briefly: Use it when you need to find\kill a process when
+installing\uninstalling some application. Also, use it when you 
+need to test the presence of a device driver.
+
+
+SUPPORT
+	
+	Supported platforms are: WinNT,Win2K,WinXP and Win2003 Server.
+
+
+DESCRIPTION
+
+	Processes::FindProcess <process_name.exe>
+	
+		Searches the currently running processes for the given
+		process name.
+		
+		return:	1	- the process was found
+				0	- the process was not found
+	
+	Processes::KillProcess <process_name.exe>
+	
+		Searches the currently running processes for the given
+		process name. If the process is found then the it gets
+		killed.
+		
+		return:	1	- the process was found and killed
+				0	- the process was not found or the process
+						cannot be killed (insuficient rights)
+	
+	Processes::FindDevice <device_base_name>
+	
+		Searches the installed devices drivers for the given
+		device base name.
+		(important: I said BASE NAME not FILENAME)
+		
+		return:	1	- the device driver was found
+				0	- the device driver was not found
+				
+
+USAGE
+
+	First of all, does not matter where you use it. Ofcourse, the
+routines must be called inside of a Section/Function scope.
+
+	Processes::FindProcess "process_name.exe"
+	Pop $R0
+ 
+	StrCmp $R0 "1" make_my_day noooooo
+	
+	make_my_day:
+		...
+	
+	noooooo:
+		...
+		
+	
+	Processes::KillProcess "process_name.exe"
+	Pop $R0
+ 
+	StrCmp $R0 "1" dead_meat why_wont_you_die
+	
+	dead_meat:
+		...
+	
+	why_wont_you_die:
+		...
+		
+
+	Processes::FindDevice "device_base_name"
+	Pop $R0
+ 
+	StrCmp $R0 "1" blabla more_blabla
+	
+	blabla:
+		...
+	
+	more_blabla:
+		...
+		
+	
+THANKS
+
+	Sunil Kamath for inspiring me. I wanted to use its FindProcDLL
+but my requirements made it imposible.
+
+	Nullsoft for creating this very powerfull installer. One big,
+free and full-featured (hmmm... and guiless for the moment) mean
+install machine!:)
+
+	ME for being such a great coder...
+											... HAHAHAHAHAHAHA!
+											
+ONE MORE THING
+
+	If you use the plugin or it's source-code, I would apreciate
+if my name is mentioned.
+
+----------------------------------------------------------------
+----------------------------------------------------------------
diff --git a/admin/win/nsi/nsis_processes/src/processes.vcproj b/admin/win/nsi/nsis_processes/src/processes.vcproj
new file mode 100755
index 000000000..245cbc99f
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/processes.vcproj
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="processes"
+	SccProjectName="processes"
+	SccLocalPath=".">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;FINDPROCDLL_EXPORTS"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="stdafx.h"
+				PrecompiledHeaderFile=".\Debug/processes.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				WarningLevel="3"
+				SuppressStartupBanner="TRUE"
+				DebugInformationFormat="4"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				OutputFile=".\Debug/processes.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				GenerateDebugInformation="TRUE"
+				ProgramDatabaseFile=".\Debug/processes.pdb"
+				ImportLibrary=".\Debug/processes.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="_DEBUG"
+				MkTypLibCompatible="TRUE"
+				SuppressStartupBanner="TRUE"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Debug/processes.tlb"
+				HeaderFileName=""/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1034"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="..\bin"
+			IntermediateDirectory="..\bin\processes"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2"
+			WholeProgramOptimization="TRUE">
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="3"
+				GlobalOptimizations="TRUE"
+				InlineFunctionExpansion="1"
+				FavorSizeOrSpeed="1"
+				OptimizeForWindowsApplication="TRUE"
+				PreprocessorDefinitions="NDEBUG;_WINDOWS;_USRDLL;FINDPROCDLL_EXPORTS"
+				StringPooling="TRUE"
+				RuntimeLibrary="0"
+				StructMemberAlignment="1"
+				EnableFunctionLevelLinking="TRUE"
+				UsePrecompiledHeader="3"
+				PrecompiledHeaderThrough="stdafx.h"
+				PrecompiledHeaderFile="..\bin\processes/processes.pch"
+				AssemblerListingLocation="..\bin\processes/"
+				ObjectFile="..\bin\processes/"
+				ProgramDataBaseFileName="..\bin\processes/"
+				WarningLevel="4"
+				SuppressStartupBanner="TRUE"/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="libc.lib"
+				OutputFile="..\bin/Processes.dll"
+				LinkIncremental="1"
+				SuppressStartupBanner="TRUE"
+				IgnoreAllDefaultLibraries="FALSE"
+				ProgramDatabaseFile="..\bin/processes.pdb"
+				OptimizeForWindows98="1"
+				ImportLibrary="..\bin/processes.lib"
+				TargetMachine="1"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="NDEBUG"
+				MkTypLibCompatible="TRUE"
+				SuppressStartupBanner="TRUE"
+				TargetEnvironment="1"
+				TypeLibraryName=".\Release/processes.tlb"
+				HeaderFileName=""/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"/>
+			<Tool
+				Name="VCWebDeploymentTool"/>
+			<Tool
+				Name="VCManagedWrapperGeneratorTool"/>
+			<Tool
+				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+			<File
+				RelativePath="processes.cpp">
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;FINDPROCDLL_EXPORTS;$(NoInherit)"
+						BasicRuntimeChecks="3"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						PreprocessorDefinitions="NDEBUG;_WINDOWS;_MBCS;_USRDLL;FINDPROCDLL_EXPORTS;$(NoInherit)"/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath=".\processes.rc">
+			</File>
+			<File
+				RelativePath="StdAfx.cpp">
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="0"
+						PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;FINDPROCDLL_EXPORTS;$(NoInherit)"
+						BasicRuntimeChecks="3"
+						UsePrecompiledHeader="1"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+						Name="VCCLCompilerTool"
+						Optimization="1"
+						PreprocessorDefinitions="NDEBUG;_WINDOWS;_MBCS;_USRDLL;FINDPROCDLL_EXPORTS;$(NoInherit)"
+						UsePrecompiledHeader="1"/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl">
+			<File
+				RelativePath="exdll.h">
+			</File>
+			<File
+				RelativePath=".\processes.h">
+			</File>
+			<File
+				RelativePath=".\resource.h">
+			</File>
+			<File
+				RelativePath="StdAfx.h">
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+		</Filter>
+		<File
+			RelativePath="processes.txt">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/admin/win/nsi/nsis_processes/src/resource.h b/admin/win/nsi/nsis_processes/src/resource.h
new file mode 100755
index 000000000..506377e21
--- /dev/null
+++ b/admin/win/nsi/nsis_processes/src/resource.h
@@ -0,0 +1,15 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by processes.rc
+//
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1001
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
diff --git a/admin/win/nsi/page_header.bmp b/admin/win/nsi/page_header.bmp
old mode 100755
new mode 100644
diff --git a/admin/win/nsi/revision.txt b/admin/win/nsi/revision.txt
old mode 100644
new mode 100755
index 56749c830..c4fbb1cfa
--- a/admin/win/nsi/revision.txt
+++ b/admin/win/nsi/revision.txt
@@ -1 +1 @@
-96
\ No newline at end of file
+97
\ No newline at end of file
diff --git a/admin/win/nsi/tomahawk.ini b/admin/win/nsi/tomahawk.ini
old mode 100755
new mode 100644
diff --git a/admin/win/nsi/tomahawk.nsi b/admin/win/nsi/tomahawk.nsi
old mode 100755
new mode 100644
index f6e49cfd3..c2d2a9bd1
--- a/admin/win/nsi/tomahawk.nsi
+++ b/admin/win/nsi/tomahawk.nsi
@@ -159,6 +159,45 @@ Function LaunchTomahawkAsUser
 FunctionEnd
 !endif
 
+##############################################################################
+#                                                                            #
+#   PROCESS HANDLING FUNCTIONS AND MACROS                                    #
+#                                                                            #
+##############################################################################
+
+!macro CheckForProcess processName gotoWhenFound gotoWhenNotFound
+   Processes::FindProcess ${processName}
+   StrCmp $R0 "0" ${gotoWhenNotFound} ${gotoWhenFound}
+!macroend
+
+!macro ConfirmEndProcess processName
+   MessageBox MB_YESNO|MB_ICONEXCLAMATION \
+     "Found ${processName} process(s) which need to be stopped.$\nDo you want the installer to stop these for you?" \
+     IDYES process_${processName}_kill IDNO process_${processName}_ended
+   process_${processName}_kill:
+      DetailPrint "Killing ${processName} processes."
+      Processes::KillProcess ${processName}
+      Sleep 1500
+      StrCmp $R0 "1" process_${processName}_ended
+      DetailPrint "Process to kill not found!"
+   process_${processName}_ended:
+!macroend
+
+!macro CheckAndConfirmEndProcess processName
+   !insertmacro CheckForProcess ${processName} 0 no_process_${processName}_to_end
+   !insertmacro ConfirmEndProcess ${processName}
+   no_process_${processName}_to_end:
+!macroend
+
+!macro EnsureTomahawkShutdown un
+   Function ${un}EnsureTomahawkShutdown
+      !insertmacro CheckAndConfirmEndProcess "tomahawk.exe"
+   FunctionEnd
+!macroend
+
+!insertmacro EnsureTomahawkShutdown ""
+!insertmacro EnsureTomahawkShutdown "un."
+
 ##############################################################################
 #                                                                            #
 #   RE-INSTALLER FUNCTIONS                                                   #
@@ -561,6 +600,9 @@ Function .onInit
    StrCmp $R0 "" SkipSetInstDir
    StrCpy $INSTDIR $R0
    SkipSetInstDir:
+   
+   ;Shutdown Tomahawk in case Add/Remove re-installer option used.
+   Call EnsureTomahawkShutdown
 FunctionEnd
 
 Function .onInstSuccess
diff --git a/admin/win/nsi/welcome.bmp b/admin/win/nsi/welcome.bmp
old mode 100755
new mode 100644
diff --git a/admin/win/page_header.bmp b/admin/win/page_header.bmp
deleted file mode 100755
index c50025a22..000000000
Binary files a/admin/win/page_header.bmp and /dev/null differ
diff --git a/admin/win/welcome.bmp b/admin/win/welcome.bmp
deleted file mode 100755
index 580504f50..000000000
Binary files a/admin/win/welcome.bmp and /dev/null differ