diff -Nura Unreal.orig/include/struct.h Unreal.new/include/struct.h
--- Unreal.orig/include/struct.h	2006-12-16 17:35:31.000000000 +0200
+++ Unreal.new/include/struct.h	2006-12-18 03:24:16.000000000 +0200
@@ -574,6 +574,7 @@
 #define OFLAG_SADMIN	0x01000000	/* services admin gets +a */
 #define OFLAG_WHOIS     0x02000000	/* gets auto +W on oper up */
 #define OFLAG_HIDE      0x04000000	/* gets auto +x on oper up */
+#define OFLAG_NOFAKELAG	0x08000000	/* Exception from fake lag */
 #define OFLAG_TKL       0x10000000	/* can use G:lines and shuns */
 #define OFLAG_GZL       0x20000000	/* can use global Z:lines */
 #define OFLAG_OVERRIDE	0x40000000	/* can use oper-override */
@@ -661,6 +662,12 @@
 #define OPClearCoAdmin(x)	((x)->oflag &= ~OFLAG_COADMIN)
 #define OPClearZLine(x)		((x)->oflag &= ~OFLAG_ZLINE)
 #define OPClearWhois(x)         ((x)->oflag &= ~OFLAG_WHOIS)
+
+/* Fake lag exception */
+#define IsNoFakeLag(x)		((x)->oflag & OFLAG_NOFAKELAG)
+#define SetNoFakeLag(x)		((x)->oflag |= OFLAG_NOFAKELAG)
+#define ClearNoFakeLag(x)	((x)->oflag &= ~OFLAG_NOFAKELAG)
+
 /*
  * defined debugging levels
  */
diff -Nura Unreal.orig/makefile.win32 Unreal.new/makefile.win32
--- Unreal.orig/makefile.win32	2006-12-16 17:35:31.000000000 +0200
+++ Unreal.new/makefile.win32	2006-12-18 03:26:26.000000000 +0200
@@ -183,7 +183,7 @@
  SRC/MODULES/M_NICK.C SRC/MODULES/M_USER.C SRC/MODULES/M_MODE.C \
  SRC/MODULES/M_WATCH.C SRC/MODULES/M_PART.C SRC/MODULES/M_JOIN.C \
  SRC/MODULES/M_MOTD.C SRC/MODULES/M_OPERMOTD.C SRC/MODULES/M_BOTMOTD.C \
- SRC/MODULES/M_LUSERS.C SRC/MODULES/M_NAMES.C
+ SRC/MODULES/M_LUSERS.C SRC/MODULES/M_NAMES.C SRC/MODULES/M_SVSNOLAG.C
 
 DLL_FILES=SRC/MODULES/M_CHGHOST.DLL SRC/MODULES/M_SDESC.DLL SRC/MODULES/M_SETIDENT.DLL \
  SRC/MODULES/M_SETNAME.DLL SRC/MODULES/M_SETHOST.DLL SRC/MODULES/M_CHGIDENT.DLL \
@@ -219,7 +219,7 @@
  SRC/MODULES/M_WATCH.DLL SRC/MODULES/M_PART.DLL SRC/MODULES/M_JOIN.DLL \
  SRC/MODULES/M_MOTD.DLL SRC/MODULES/M_OPERMOTD.DLL SRC/MODULES/M_BOTMOTD.DLL \
  SRC/MODULES/M_LUSERS.DLL SRC/MODULES/M_NAMES.DLL \
- SRC/MODULES/CLOAK.DLL
+ SRC/MODULES/CLOAK.DLL SRC/MODULES/M_SVSNOLAG.DLL
 
 
 ALL: CONF UNREAL.EXE WIRCD.EXE src/modules/commands.dll MODULES 
@@ -774,6 +774,9 @@
 src/modules/cloak.dll: src/modules/cloak.c $(INCLUDES)
         $(CC) $(MODCFLAGS) src/modules/cloak.c $(MODLFLAGS)
 
+src/modules/m_svsnolag.dll: src/modules/m_svsnolag.c $(INCLUDES)
+        $(CC) $(MODCFLAGS) src/modules/m_svsnolag.c $(MODLFLAGS)
+
 dummy:
 
 
diff -Nura Unreal.orig/src/modules/Makefile.in Unreal.new/src/modules/Makefile.in
--- Unreal.orig/src/modules/Makefile.in	2006-12-16 17:35:31.000000000 +0200
+++ Unreal.new/src/modules/Makefile.in	2006-12-18 03:24:16.000000000 +0200
@@ -53,7 +53,7 @@
 	 m_svsfline.so m_dccdeny.so m_undccdeny.so m_whowas.so \
 	 m_connect.so m_dccallow.so m_userip.so m_nick.so m_user.so \
 	 m_mode.so m_watch.so m_part.so m_join.so m_motd.so m_opermotd.so \
-	 m_botmotd.so m_lusers.so m_names.so
+	 m_botmotd.so m_lusers.so m_names.so m_svsnolag.so
 
 #note change of .c to .o
 COMMANDS=m_sethost.o m_chghost.o m_chgident.o m_setname.o m_setident.o \
@@ -75,7 +75,7 @@
 	 m_svsfline.o m_dccdeny.o m_undccdeny.o m_whowas.o \
 	 m_connect.o m_dccallow.o m_userip.o m_nick.o m_user.o \
 	 m_mode.o m_watch.o m_part.o m_join.o m_motd.o m_opermotd.o \
-	 m_botmotd.o m_lusers.o m_names.o
+	 m_botmotd.o m_lusers.o m_names.o m_svsnolag.o
 
 
 MODULES=commands.so cloak.so $(R_MODULES)
@@ -403,6 +403,9 @@
 m_names.o: m_names.c $(INCLUDES)
 	$(CC) $(CFLAGS) $(MODULEFLAGS)  -c m_names.c
 
+m_svsnolag.o: m_svsnolag.c $(INCLUDES)
+	$(CC) $(CFLAGS) $(MODULEFLAGS)  -c m_svsnolag.c
+
 #############################################################################
 #             .so's section
 #############################################################################
@@ -811,6 +814,10 @@
 	$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
 	       -o m_names.so m_names.c
 
+m_svsnolag.so: m_svsnolag.c $(INCLUDES)
+	$(CC) $(CFLAGS) $(MODULEFLAGS) -DDYNAMIC_LINKING \
+		-o m_svsnolag.so m_svsnolag.c
+
 #############################################################################
 #             and now the remaining modules...
 #############################################################################
diff -Nura Unreal.orig/src/modules/l_commands.c Unreal.new/src/modules/l_commands.c
--- Unreal.orig/src/modules/l_commands.c	2006-12-16 17:35:31.000000000 +0200
+++ Unreal.new/src/modules/l_commands.c	2006-12-18 03:24:16.000000000 +0200
@@ -121,6 +121,7 @@
 extern int m_motd_Init(ModuleInfo *modinfo), m_opermotd_Init(ModuleInfo *modinfo);
 extern int m_botmotd_Init(ModuleInfo *modinfo), m_lusers_Init(ModuleInfo *modinfo);
 extern int m_names_Init(ModuleInfo *modinfo);
+extern int m_svsnolag_Init(ModuleInfo *modinfo);
 #ifdef GUEST
 extern int m_guest_Init(ModuleInfo *modinfo);
 #endif
@@ -169,6 +170,7 @@
 extern int m_motd_Load(int module_load), m_opermotd_Load(int module_load);
 extern int m_botmotd_Load(int module_load), m_lusers_Load(int module_load);
 extern int m_names_Load(int module_load);
+extern int m_svsnolag_Load(int module_load);
 #ifdef GUEST
 extern int m_guest_Load(int module_load);
 #endif
@@ -203,7 +205,7 @@
 extern int m_nick_Unload(), m_user_Unload(), m_mode_Unload();
 extern int m_watch_Unload(), m_part_Unload(), m_join_Unload();
 extern int m_motd_Unload(), m_opermotd_Unload(), m_botmotd_Unload();
-extern int m_lusers_Unload(), m_names_Unload();
+extern int m_lusers_Unload(), m_names_Unload(), m_svsnolag_Unload();
 #ifdef GUEST
 extern int m_guest_Unload();
 #endif
@@ -344,6 +346,7 @@
 	m_botmotd_Init(ModCmdsInfo);
 	m_lusers_Init(ModCmdsInfo);
 	m_names_Init(ModCmdsInfo);
+	m_svsnolag_Init(ModCmdsInfo);
 #ifdef GUEST
 	m_guest_Init(ModCmdsInfo);
 #endif
@@ -456,6 +459,7 @@
 	m_botmotd_Load(module_load);
 	m_lusers_Load(module_load);
 	m_names_Load(module_load);
+	m_svsnolag_Load(module_load);
 #ifdef GUEST
 	m_guest_Load(module_load);
 #endif
@@ -568,6 +572,7 @@
 	m_botmotd_Unload();
 	m_lusers_Unload();
 	m_names_Unload();
+	m_svsnolag_Unload();
 #ifdef GUEST
 	m_guest_Unload();
 #endif
diff -Nura Unreal.orig/src/modules/m_svsnolag.c Unreal.new/src/modules/m_svsnolag.c
--- Unreal.orig/src/modules/m_svsnolag.c	1970-01-01 03:00:00.000000000 +0300
+++ Unreal.new/src/modules/m_svsnolag.c	2006-12-18 03:24:16.000000000 +0200
@@ -0,0 +1,138 @@
+/*
+ *   IRC - Internet Relay Chat, src/modules/m_svsnolag.c
+ *   (C) 2006 Alex Berezhnyak and djGrrr
+ *
+ *   Fake lag exception - SVSNOLAG and SVS2NOLAG commands
+ *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include "config.h"
+#include "struct.h"
+#include "common.h"
+#include "sys.h"
+#include "numeric.h"
+#include "msg.h"
+#include "channel.h"
+#include <time.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _WIN32
+#include <io.h>
+#endif
+#include <fcntl.h>
+#include "h.h"
+#include "proto.h"
+#ifdef STRIPBADWORDS
+#include "badwords.h"
+#endif
+#ifdef _WIN32
+#include "version.h"
+#endif
+
+DLLFUNC int m_svsnolag(aClient *cptr, aClient *sptr, int parc, char *parv[]);
+DLLFUNC int m_svs2nolag(aClient *cptr, aClient *sptr, int parc, char *parv[]);
+
+#define MSG_SVSNOLAG 	"SVSNOLAG"	
+#define TOK_SVSNOLAG 	"sl"
+#define MSG_SVS2NOLAG 	"SVS2NOLAG"	
+#define TOK_SVS2NOLAG 	"SL"
+
+ModuleHeader MOD_HEADER(m_svsnolag)
+  = {
+	"m_svsnolag",
+	"$Id: m_svsnolag.c,v 1.1.1.1.1.1 2006/12/18 02:35:31 core Exp $",
+	"commands /svsnolag and /svs2nolag", 
+	"3.2-b8-1",
+	NULL
+    };
+
+DLLFUNC int MOD_INIT(m_svsnolag)(ModuleInfo *modinfo)
+{
+	add_Command(MSG_SVSNOLAG, TOK_SVSNOLAG, m_svsnolag, MAXPARA);
+	add_Command(MSG_SVS2NOLAG, TOK_SVS2NOLAG, m_svs2nolag, MAXPARA);
+	MARK_AS_OFFICIAL_MODULE(modinfo);
+	return MOD_SUCCESS;
+}
+
+DLLFUNC int MOD_LOAD(m_svsnolag)(int module_load)
+{
+	return MOD_SUCCESS;
+}
+
+DLLFUNC int MOD_UNLOAD(m_svsnolag)(int module_unload)
+{
+	if (del_Command(MSG_SVSNOLAG, TOK_SVSNOLAG, m_svsnolag) < 0 || del_Command(MSG_SVS2NOLAG, TOK_SVS2NOLAG, m_svs2nolag) < 0)
+	{
+		sendto_realops("Failed to delete commands when unloading %s",
+				MOD_HEADER(m_svsnolag).name);
+	}
+	return MOD_SUCCESS;
+}
+
+int do_svsnolag(aClient *cptr, aClient *sptr, int parc, char *parv[], int show_change)
+{
+	aClient *acptr;
+	char *cmd = show_change ? MSG_SVS2NOLAG : MSG_SVSNOLAG;
+
+
+	if (!IsULine(sptr))
+		return 0;
+
+	if (parc != 3)
+		return 0;
+
+	if (!(acptr = find_person(parv[2], (aClient *)NULL)))
+		return 0;
+
+	if (!MyClient(acptr))
+	{
+		sendto_one(acptr, ":%s %s %s %s", parv[0], cmd, parv[1], parv[2]);
+		return 0;
+	}
+
+	if (*parv[1] == '+')
+	{
+		if (!IsNoFakeLag(acptr))
+		{
+			SetNoFakeLag(acptr);
+			if (show_change)
+				sendnotice(acptr, "You are now excepted from fake lag");
+		}
+	}
+	if (*parv[1] == '-')
+	{
+		if (IsNoFakeLag(acptr))
+		{
+			ClearNoFakeLag(acptr);
+			if (show_change)
+				sendnotice(acptr, "You are not more excepted from fake lag");
+		}
+	}
+
+	return 0;
+}
+
+
+int m_svsnolag(aClient *cptr, aClient *sptr, int parc, char *parv[])
+{
+	return do_svsnolag(cptr, sptr, parc, parv, 0);
+}
+
+int m_svs2nolag(aClient *cptr, aClient *sptr, int parc, char *parv[])
+{
+	return do_svsnolag(cptr, sptr, parc, parv, 1);
+}
diff -Nura Unreal.orig/src/parse.c Unreal.new/src/parse.c
--- Unreal.orig/src/parse.c	2006-12-16 17:35:31.000000000 +0200
+++ Unreal.new/src/parse.c	2006-12-18 03:24:16.000000000 +0200
@@ -158,7 +158,7 @@
  */
 inline void parse_addlag(aClient *cptr, int cmdbytes)
 {
-	if (!IsServer(cptr) && 
+	if (!IsServer(cptr) && !IsNoFakeLag(cptr) &&
 #ifdef FAKELAG_CONFIGURABLE
 		!(cptr->class && (cptr->class->options & CLASS_OPT_NOFAKELAG)) && 
 #endif
