diff -ru Unreal3.2/include/h.h New/include/h.h
--- Unreal3.2/include/h.h	2009-04-13 12:03:57.000000000 +0100
+++ New/include/h.h	2010-08-31 02:47:52.027703461 +0100
@@ -437,6 +437,7 @@
 extern MODVAR long UMODE_STRIPBADWORDS; /* 0x80000000	 */
 extern MODVAR long UMODE_HIDEWHOIS; /* hides channels in /whois */
 extern MODVAR long UMODE_NOCTCP;    /* blocks all ctcp (except dcc and action) */
+extern MODVAR long UMODE_HIDLE;     /* hides oper idle times */
 extern MODVAR long AllUmodes, SendUmodes;
 
 extern MODVAR long SNO_KILLS;
diff -ru Unreal3.2/src/modules/m_whois.c New/src/modules/m_whois.c
--- Unreal3.2/src/modules/m_whois.c	2009-04-13 12:04:37.000000000 +0100
+++ New/src/modules/m_whois.c	2010-08-31 03:15:25.663649815 +0100
@@ -322,15 +322,18 @@
 					    name, acptr->user->swhois);
 
 			/*
-			 * Fix /whois to not show idle times of
-			 * global opers to anyone except another
-			 * global oper or services.
-			 * -CodeM/Barubary
+			 * Umode I will now hide the
+			 * idle times of opers from regular users.
+			 * Nath.
 			 */
-			if (MyConnect(acptr))
+			if (MyConnect(acptr) && !((acptr->umodes & UMODE_HIDLE) && !IsAnOper(sptr)))
+			{
 				sendto_one(sptr, rpl_str(RPL_WHOISIDLE),
-				    me.name, parv[0], name,
-				    TStime() - acptr->last, acptr->firsttime);
+-				    me.name, parv[0], name,
+-				    TStime() - acptr->last, acptr->firsttime);
+			}
+
+
 		}
 		if (!found)
 			sendto_one(sptr, err_str(ERR_NOSUCHNICK),
diff -ru Unreal3.2/src/umodes.c New/src/umodes.c
--- Unreal3.2/src/umodes.c	2006-02-03 13:57:21.000000000 +0000
+++ New/src/umodes.c	2010-08-31 03:17:07.322944458 +0100
@@ -78,6 +78,7 @@
 long UMODE_STRIPBADWORDS = 0L; /* Strip badwords */
 long UMODE_HIDEWHOIS = 0L;     /* Hides channels in /whois */
 long UMODE_NOCTCP = 0L;	       /* Blocks ctcp (except dcc and action) */
+long UMODE_HIDLE = 0l;         /* Hides the idle time of opers */
 
 long SNO_KILLS = 0L;
 long SNO_CLIENT = 0L;
@@ -155,6 +156,7 @@
 	UmodeAdd(NULL, 't', UMODE_GLOBAL, NULL, &UMODE_SETHOST);
 	UmodeAdd(NULL, 'G', UMODE_GLOBAL, NULL, &UMODE_STRIPBADWORDS);
 	UmodeAdd(NULL, 'p', UMODE_GLOBAL, NULL, &UMODE_HIDEWHOIS);
+	UmodeAdd(NULL, 'I', UMODE_GLOBAL, umode_allow_opers, &UMODE_HIDLE);
 	SnomaskAdd(NULL, 'k', umode_allow_all, &SNO_KILLS);
 	SnomaskAdd(NULL, 'c', umode_allow_opers, &SNO_CLIENT);
 	SnomaskAdd(NULL, 'f', umode_allow_opers, &SNO_FLOOD);
