Index: com/planet_ink/coffee_mud/application/MUD.java
===================================================================
--- com/planet_ink/coffee_mud/application/MUD.java	(revision 3057)
+++ com/planet_ink/coffee_mud/application/MUD.java	(working copy)
@@ -49,7 +49,7 @@
 public class MUD extends Thread implements MudHost
 {
     private static final float HOST_VERSION_MAJOR=(float)5.6;
-    private static final long  HOST_VERSION_MINOR=0;
+    private static final long  HOST_VERSION_MINOR=2;
 
     protected static boolean bringDown=false;
     private static String execExternalCommand=null;
@@ -117,28 +117,28 @@
 		}
 
 		CMProps page=CMProps.instance();
-		
+
 		if ((page == null) || (!page.loaded))
 		{
 			fatalStartupError(t,1);
 			return false;
 		}
-        
+
         char tCode=Thread.currentThread().getThreadGroup().getName().charAt(0);
         Vector privacyV=new Vector(1);
         if(tCode!=MAIN_HOST)
             privacyV=CMParms.parseCommas(CMProps.getVar(CMProps.SYSTEM_PRIVATERESOURCES).toUpperCase(),true);
-        
+
         long startWait=System.currentTimeMillis();
 		while (!serverIsRunning && isOK && ((System.currentTimeMillis() - startWait)< 90000))
 		{ try{ Thread.sleep(500); }catch(Exception e){ isOK=false;} }
-		
+
 		if((!isOK)||(!serverIsRunning))
 		{
 			fatalStartupError(t,5);
 			return false;
 		}
-        
+
 		Vector compress=CMParms.parseCommas(page.getStr("COMPRESS").toUpperCase(),true);
 		CMProps.setBoolVar(CMProps.SYSTEMB_ITEMDCOMPRESS,compress.contains("ITEMDESC"));
 		CMProps.setBoolVar(CMProps.SYSTEMB_MOBCOMPRESS,compress.contains("GENMOBS"));
@@ -162,7 +162,7 @@
                 baseEngine=(DatabaseEngine)CMLib.library(MAIN_HOST,CMLib.LIBRARY_DATABASE);
             }
             if(MUD.bringDown) return false;
-            
+
             if(page.getPrivateStr("DBCLASS").length()==0)
             {
                 CMLib.registerLibrary(baseEngine);
@@ -209,13 +209,13 @@
             CMFile F = new CMFile("/test.the.database",null,false);
             if(F.exists())
                 Log.sysOut(Thread.currentThread().getName(),"Test file found .. hmm.. that was unexpected.");
-                
+
         } catch(Throwable e) {
             Log.errOut(Thread.currentThread().getName(),e.getMessage());
             Log.errOut(Thread.currentThread().getName(),"Database error! Panic shutdown!");
             System.exit(-1);
         }
-        
+
 		String webServersList=page.getPrivateStr("RUNWEBSERVERS");
 		if(webServersList.equalsIgnoreCase("true"))
 		    webServersList="pub,admin";
@@ -256,7 +256,7 @@
         CMLib.time().globalClock().initializeINIClock(page);
         if((tCode==MAIN_HOST)||(privacyV.contains("FACTIONS")))
             CMLib.factions().reloadFactions(CMProps.getVar(CMProps.SYSTEM_PREFACTIONS));
-        
+
         if((tCode==MAIN_HOST)||(page.getRawPrivateStr("SYSOPMASK")!=null))
         {
     		CMSecurity.setSysOp(page.getStr("SYSOPMASK")); // requires all classes be loaded
@@ -318,7 +318,7 @@
     			A.fillInAreaRooms();
     		}
     		Log.sysOut(Thread.currentThread().getName(),"Mapped rooms      : "+CMLib.map().numRooms()+" in "+CMLib.map().numAreas()+" areas");
-    
+
     		if(!CMLib.map().roomIDs().hasMoreElements())
     		{
     			Log.sysOut("NO MAPPED ROOM?!  I'll make ya one!");
@@ -337,7 +337,7 @@
     			room.addItem(I);
     			CMLib.database().DBUpdateItems(room);
     		}
-    		
+
             CMLib.login().initStartRooms(page);
             CMLib.login().initDeathRooms(page);
             CMLib.login().initBodyRooms(page);
@@ -445,7 +445,7 @@
             return false;
         }
 
-        
+
         for(int i=0;i<CMLib.hosts().size();i++)
             ((MudHost)CMLib.hosts().elementAt(i)).setAcceptConnections(true);
         Log.sysOut(Thread.currentThread().getName(),"Initialization complete.");
@@ -550,15 +550,15 @@
         if((CMLib.database()!=null)&&(CMLib.database().isConnected())&&(CMLib.encoder()!=null))
         {
             StringBuffer rejectText;
-            
+
         	try { rejectText = Resources.getFileResource("text/offline.txt",true);
         	} catch(java.lang.NullPointerException npe) { rejectText=new StringBuffer("");}
-        	
+
             PrintWriter out = new PrintWriter(sock.getOutputStream());
             out.println("\n\rOFFLINE: " + CMProps.getVar(CMProps.SYSTEM_MUDSTATUS)+"\n\r");
             out.println(rejectText);
             out.flush();
-        	
+
             try{Thread.sleep(1000);}catch(Exception e){}
             out.close();
             sock = null;
@@ -569,8 +569,8 @@
             sock = null;
         }
 	}
-	
-    public String getLanguage() 
+
+    public String getLanguage()
     {
     	String lang = CMProps.instance().getStr("LANGUAGE").toUpperCase().trim();
     	if(lang.length()==0) return "English";
@@ -1038,7 +1038,7 @@
             new CMLib(); // initialize the lib
             new CMClass(); // initialize the classes
             Log.shareWith(MudHost.MAIN_HOST);
-            
+
             // wait for ini to be loaded, and for other matters
             if(threadCode!=MAIN_HOST) {
                 while((CMLib.library(MAIN_HOST,CMLib.LIBRARY_INTERMUD)==null)&&(!MUD.bringDown)) {
@@ -1057,7 +1057,7 @@
             }
             page.resetSystemVars();
             CMProps.setBoolVar(CMProps.SYSTEMB_MUDSTARTED,false);
-            
+
             if(threadCode!=MAIN_HOST)
             {
                 if(CMath.isInteger(page.getPrivateStr("NUMLOGS")))
@@ -1071,7 +1071,7 @@
                 else
                     CMSecurity.instance().markShared();
             }
-            
+
             if(page.getStr("DISABLE").trim().length()>0)
                 Log.sysOut(Thread.currentThread().getName(),"Disabled subsystems: "+page.getStr("DISABLE"));
             if(page.getStr("DEBUG").trim().length()>0)
@@ -1080,13 +1080,13 @@
                 if(!Log.debugChannelOn())
                     Log.errOut(Thread.currentThread().getName(),"Debug logging is disabled! Check your DBGMSGS flag!");
             }
-            
+
             DBConnector currentDBconnector=new DBConnector();
             CMLib.registerLibrary(new DBInterface(currentDBconnector));
             CMLib.registerLibrary(new ProcessHTTPrequest(null,null,null,true));
             CMProps.setVar(CMProps.SYSTEM_MUDVER,HOST_VERSION_MAJOR + "." + HOST_VERSION_MINOR);
-            
-            // an arbitrary dividing line. After threadCode 0 
+
+            // an arbitrary dividing line. After threadCode 0
 	        if(threadCode==MAIN_HOST) {
     	        CMLib.registerLibrary(new ServiceEngine());
     	        CMLib.registerLibrary(new IMudClient());
@@ -1196,7 +1196,7 @@
 			nameID=CMParms.combine(V,0);
 		}
         new CMLib(); // initialize this threads libs
-        
+
 		if(iniFiles.size()==0) iniFiles.addElement("coffeemud.ini");
 		if(nameID.length()==0) nameID="Unnamed CoffeeMud";
 		String iniFile=(String)iniFiles.firstElement();
Index: com/planet_ink/coffee_mud/core/CMParms.java
===================================================================
--- com/planet_ink/coffee_mud/core/CMParms.java	(revision 3057)
+++ com/planet_ink/coffee_mud/core/CMParms.java	(working copy)
@@ -47,8 +47,8 @@
         }
         return Combined.toString().trim();
     }
-    
-    
+
+
 	public static void sortVector(Vector V) {
         Vector V2=new Vector(new TreeSet(V));
         V.clear();
@@ -383,11 +383,11 @@
 
     public static String cleanBit(String s)
     {
-        if(s.length()==0) 
+        if(s.length()==0)
             return s;
         if((s.charAt(0)==' ')||(s.charAt(s.length()-1)==' '))
             s=s.trim();
-        if(s.length()<2) 
+        if(s.length()<2)
             return s.replace('\'','`');
         if(s.charAt(0)=='\'')
         {
@@ -508,7 +508,7 @@
                         text=text.substring(x);
                         x=0;
                         while((x<text.length())
-                            &&((!endWithQuote)&&(!Character.isWhitespace(text.charAt(x))))
+                            &&((!endWithQuote)&&(!Character.isWhitespace(text.charAt(x)))&&(text.charAt(x)!=';')&&(text.charAt(x)!=','))
                             ||((endWithQuote)&&(text.charAt(x)!='\"')))
 	                            x++;
                         return text.substring(0,x).trim();
@@ -860,7 +860,7 @@
     		h.putAll(parseEQParms((String)parms.elementAt(x)));
         return h;
     }
-    
+
     public static int stringContains(String str1, String str2)
     {
         StringBuffer buf1=new StringBuffer(str1.toLowerCase());
@@ -1128,7 +1128,7 @@
         }
         return str.toString();
     }
-    
+
     public static String toSemicolonList(Vector bytes)
     {
         StringBuffer str=new StringBuffer("");
@@ -1141,7 +1141,7 @@
     {
         return toSafeSemicolonList(list.toArray());
     }
-    
+
     public static String toSafeSemicolonList(Object[] list)
     {
         StringBuffer buf1=new StringBuffer("");
@@ -1452,7 +1452,7 @@
             V.add(O.elementAt(s));
         return V;
     }
-    
+
     public static HashSet makeHashSet(Enumeration E)
     {
         HashSet V=new HashSet();
@@ -1461,7 +1461,7 @@
             V.add(E.nextElement());
         return V;
     }
-    
+
     public static Vector makeVector()
     { return new Vector();}
     public static Vector makeVector(Object O)
@@ -1510,14 +1510,14 @@
     		newa[newa.length-1-i]=back[back.length-1-i];
     	return newa;
     }
-    
+
 	public static void addToVector(Vector from, Vector to)
     {
         if(from!=null)
         for(int i=0;i<from.size();i++)
             to.addElement(from.elementAt(i));
     }
-    
+
 	public static void delFromVector(Vector del, Vector from)
     {
         if(del!=null)
@@ -1644,7 +1644,7 @@
                 return i;
         return -1;
     }
-    
+
     public static boolean contains(String[] supported, String expertise)
     { return indexOf(supported,expertise)>=0;}
     public static boolean containsIgnoreCase(String[] supported, String expertise)
Index: com/planet_ink/coffee_mud/core/CMProps.java
===================================================================
--- com/planet_ink/coffee_mud/core/CMProps.java	(revision 3057)
+++ com/planet_ink/coffee_mud/core/CMProps.java	(working copy)
@@ -352,7 +352,7 @@
         if(s==null) return "";
         return s;
     }
-    
+
     /** retrieve raw local .ini file entry as a string
     *
     * <br><br><b>Usage:</b>  String s=getRawPrivateStr("TAG");
@@ -363,7 +363,7 @@
     {
         return getProperty(tagToGet);
     }
-    
+
 	/** retrieve a particular .ini file entry as a string
 	*
 	* <br><br><b>Usage:</b>  String s=getStr(p,"TAG");
@@ -393,7 +393,7 @@
 		if((thisTag==null)||(thisTag.length()==0)) return defaultVal;
 		return thisTag;
 	}
-	
+
 	/** retrieve particular .ini file entrys as a string array
 	*
 	* <br><br><b>Usage:</b>  String s=getStrsStarting(p,"TAG");
@@ -480,13 +480,13 @@
 
     public static String getVar(int varNum)
     {
-    	try { return p().sysVars[varNum];} 
+    	try { return p().sysVars[varNum];}
     	catch(Throwable t) { return ""; }
     }
 
     public static int getIntVar(int varNum)
     {
-    	try { return p().sysInts[varNum].intValue(); } 
+    	try { return p().sysInts[varNum].intValue(); }
     	catch(Throwable t) { return -1; }
     }
 
@@ -499,7 +499,7 @@
 
     public static boolean getBoolVar(int varNum)
     {
-    	try { return p().sysBools[varNum].booleanValue(); } 
+    	try { return p().sysBools[varNum].booleanValue(); }
     	catch(Throwable t) { return false; }
     }
 
@@ -546,7 +546,7 @@
         if(val==null) val="";
         setUpLowVar(varNum,val.toUpperCase());
     }
-    
+
     private static void setUpLowVar(CMProps props, int varNum, String val)
     {
         if((varNum<0)||(varNum>=NUM_SYSTEM)) return ;
@@ -566,7 +566,7 @@
     public static void setUpLowVar(int varNum, String val)
     { setUpLowVar(p(),varNum,val); }
     public static void setUpAllLowVar(int varNum, String val)
-    { 
+    {
         for(int p=0;p<props.length;p++)
             if(props[p]!=null)
                setUpLowVar(props[p],varNum,val);
@@ -631,7 +631,7 @@
     	return endVal;
     }
 
-    public static String getListValue(String key) 
+    public static String getListValue(String key)
     {
         final String listFileName=CMProps.p().getProperty("LISTFILE");
         synchronized(listFileName.intern())
@@ -897,7 +897,7 @@
 
         setIntVar(SYSTEMI_MAXITEMSHOWN,getStr("MAXITEMSHOWN"));
         setIntVar(SYSTEMI_MUDSTATE,getStr("MUDSTATE"));
-        
+
         setUpLowVar(SYSTEM_FORMULA_ATTACKADJUSTMENT, getStr("FORMULA_ATTACKADJUSTMENT","(50+@x1+(((@x2-9)/5)*((@x3-9)/5)*((@x3-9)/5))+@x4)-(0.15*@xx*@x5)-(0.15*@xx*@x6)-(0.3*@xx*@x7)"));
         setUpLowVar(SYSTEM_FORMULA_ARMORADJUSTMENT, getStr("FORMULA_ARMORADJUSTMENT","(@x1-( (((@x2-9)/5)*((@x3-9)/5)*((@x3-9)/5*@x8)) +(@x4*@x8)-(0.15*@xx>0*@x5)-(0.15*@xx>0*@x6)-(0.3*@xx>0*@x7)*@x9))-100"));
         setUpLowVar(SYSTEM_FORMULA_ATTACKFUDGEBONUS, getStr("FORMULA_ATTACKFUDGEBONUS","@x3 * (@x1 - @x2)* (@x1 - @x2)"));
@@ -913,15 +913,23 @@
         setUpLowVar(SYSTEM_FORMULA_CHANCEWEAPONCRIT, getStr("FORMULA_CHANCEWEAPONCRIT","((((@x2-10+((@x8-@x9)<10))/2.5)>0 * ((@x3-10+((@x8-@x9)<10))/2.5)>0 * ((@x3-10+((@x8-@x9)<10))/2.5)))"));
         setUpLowVar(SYSTEM_FORMULA_DAMAGEWEAPONCRIT, getStr("FORMULA_DAMAGEWEAPONCRIT","(@x1 * (((@x2-10+((@x8-@x9)<10))/2.5)>0 * ((@x3-10+((@x8-@x9)<10))/2.5)>0 * ((@x3-10+((@x8-@x9)<10))/2.5))/50.0)+(@x4/2)"));
         setUpLowVar(SYSTEM_FORMULA_NPCHITPOINTS, getStr("FORMULA_NPCHITPOINTS","3 + @x1 + (@x1 * @x2)"));
-        
+
         Directions.instance().reInitialize(getInt("DIRECTIONS"));
 
         resetSecurityVars();
         statCodeExtensions = getStrsStarting("EXTVAR_");
 
+        // initialized elsewhere
+        if(getVar(CMProps.SYSTEM_MAILBOX)==null)
+        {
+        	setVar(SYSTEM_MAILBOX, "");
+            setIntVar(SYSTEMI_MAXMAILBOX,0);
+    		setBoolVar(SYSTEMB_EMAILFORWARDING,false);
+        }
+
         CMLib.propertiesLoaded();
     }
-    
+
     public void resetSecurityVars() {
         String disable=getStr("DISABLE");
         if(getVar(SYSTEM_MULTICLASS).equalsIgnoreCase("DISABLED"))
@@ -1197,7 +1205,7 @@
             image=getHashedMXPImage(H,"RESOURCE_"+RawMaterial.CODES.NAME(((RawMaterial)O).material()));
             if(image==null)
 	            image=getHashedMXPImage(H,"RESOURCE_"+RawMaterial.MATERIAL_DESCS[(((RawMaterial)O).material()&RawMaterial.MATERIAL_MASK)>>8]);
-            if(image==null) 
+            if(image==null)
             	image=getHashedMXPImage(H,"RESOURCE_*");
         }
         else
@@ -1403,12 +1411,12 @@
         }
         return page;
     }
-    
+
     public static String getStatCodeExtensionValue(String[] codes, String[] xtraValues, String code) {
         if(xtraValues!=null)
             for(int x=0;x<xtraValues.length;x++)
                 if(codes[codes.length-x-1].equalsIgnoreCase(code))
-                    return xtraValues[xtraValues.length-x-1]; 
+                    return xtraValues[xtraValues.length-x-1];
         return "";
     }
 
@@ -1416,7 +1424,7 @@
         if(xtraValues!=null)
             for(int x=0;x<xtraValues.length;x++)
                 if(codes[codes.length-x-1].equalsIgnoreCase(code))
-                    xtraValues[xtraValues.length-x-1]=val; 
+                    xtraValues[xtraValues.length-x-1]=val;
     }
 
     public static Vector getStatCodeExtensions(Class<?> C, String ID)
Index: com/planet_ink/coffee_mud/core/threads/ServiceEngine.java
===================================================================
--- com/planet_ink/coffee_mud/core/threads/ServiceEngine.java	(revision 3057)
+++ com/planet_ink/coffee_mud/core/threads/ServiceEngine.java	(working copy)
@@ -19,7 +19,7 @@
 import com.planet_ink.coffee_mud.Libraries.interfaces.*;
 
 
-/* 
+/*
    Copyright 2000-2010 Bo Zimmerman
 
    Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,7 +38,7 @@
 public class ServiceEngine implements ThreadEngine
 {
     public static final long STATUS_ALLMISCTICKS=Tickable.STATUS_MISC|Tickable.STATUS_MISC2|Tickable.STATUS_MISC3|Tickable.STATUS_MISC4|Tickable.STATUS_MISC5|Tickable.STATUS_MISC6;
-    
+
     public String ID(){return "ServiceEngine";}
     public CMObject newInstance(){try{return (CMObject)getClass().newInstance();}catch(Exception e){return new ServiceEngine();}}
     public void initializeClass(){}
@@ -49,9 +49,9 @@
 	protected LinkedList<Tick> ticks=new LinkedList<Tick>();
 	public Iterator<Tick> tickGroups(){return ticks.iterator();}
     private boolean isSuspended=false;
-	
+
     public ThreadEngine.SupportThread getSupportThread() { return thread;}
-    
+
 	public void delTickGroup(Tick tock)
 	{
 		LinkedList<Tick> newTicks = (LinkedList<Tick>)ticks.clone();
@@ -67,7 +67,7 @@
 			ticks=newTicks;
 		}
 	}
-	
+
 	public Tick getAvailTickThread(Tickable E, long TICK_TIME, int tickID)
 	{
 		Tick tock=null;
@@ -79,7 +79,7 @@
 			almostTock=e.next();
 			if(almostTock!=null)
 			{
-	        	if(almostTock.contains(E,tickID)) 
+	        	if(almostTock.contains(E,tickID))
 	        		return null;
 				if((tock==null)
 	            &&(almostTock.TICK_TIME==TICK_TIME)
@@ -104,7 +104,7 @@
 
     public void startTickDown(Tickable E, int tickID, int numTicks)
     { startTickDown(E,tickID,Tickable.TIME_TICK,numTicks); }
-    
+
 	public void startTickDown(Tickable E,
 							  int tickID,
                               long TICK_TIME,
@@ -127,7 +127,6 @@
 		{
 			almostTock=e.next();
 			set=almostTock.getTickSet(E,tickID);
-			if(set!=null)
 			for(;set.hasNext();)
 				almostTock.delTicker((TockClient)set.next());
 		}
@@ -142,7 +141,7 @@
 		{
 			almostTock=e.next();
 			set=almostTock.getTickSet(E,tickID);
-			if(set!=null) return true;
+			if(set.hasNext()) return true;
 		}
 		return false;
 	}
@@ -160,7 +159,6 @@
 		{
 			almostTock=e.next();
 			set=almostTock.getTickSet(E,tickID);
-			if(set!=null)
 			for(;set.hasNext();)
 				((TockClient)set.next()).suspended=suspend;
 		}
@@ -174,12 +172,12 @@
 		{
 			almostTock=e.next();
 			set=almostTock.getTickSet(E,tickID);
-			if((set!=null)&&(set.hasNext())) return true;
+			if(set.hasNext()) return ((TockClient)set.next()).suspended;
 		}
 		return false;
 	}
-	
 
+
 	public boolean isHere(Tickable E2, Room here)
 	{
 		if(E2==null)
@@ -407,7 +405,7 @@
                     curThreadNum++;
                 }
             }
-            
+
         }
 		if(itemCode.equalsIgnoreCase("topObjectClient"))
 		{
@@ -465,8 +463,8 @@
             }
         }
     }
-	
-	
+
+
 	public void tickAllTickers(Room here)
 	{
         Tick almostTock=null;
@@ -538,7 +536,7 @@
 
 		if((group<0)||(client<0)||(group>=ticks.size())) return "";
 		Tick almostTock=(Tick)ticks.get(group);
-		
+
 		if(client>=almostTock.numTickers()) return "";
 		TockClient C=almostTock.fetchTickerByIndex(client);
 		if(C==null) return "";
@@ -668,7 +666,7 @@
 				}
 		}
 	}
-    
+
     public Vector getNamedTickingObjects(String name)
     {
         Vector V=new Vector();
@@ -689,7 +687,7 @@
         }
         return V;
     }
-    
+
     public String getTickStatusSummary(Tickable obj)
     {
         if(obj==null) return "";
@@ -794,9 +792,9 @@
         if(T instanceof ExternalHTTPRequests)
             return " ("+((ExternalHTTPRequests)T).getHTTPstatus()+" - "+((ExternalHTTPRequests)T).getHTTPstatusInfo()+")";
         return "";
-        
+
     }
-    
+
     public void insertOrderDeathInOrder(DVector DV, long lastStart, String msg, Tick tock)
     {
         if(DV.size()>0)
@@ -847,7 +845,7 @@
                                 str=new StringBuffer("LOCKED GROUP "+almostTock.getCounter()+" : "+obj.name()+" ("+((Environmental)obj).ID()+") @"+CMLib.time().date2String(client.lastStart)+", status("+code+" ("+codeWord+"), tickID "+client.tickID);
                             else
                                 str=new StringBuffer("LOCKED GROUP "+almostTock.getCounter()+": "+obj.name()+", status("+code+" ("+codeWord+") @"+CMLib.time().date2String(client.lastStart)+", tickID "+client.tickID);
-    
+
                             if((obj instanceof MOB)&&(((MOB)obj).location()!=null))
                                 msg=str.toString()+" in "+((MOB)obj).location().roomID();
                             else
@@ -872,7 +870,7 @@
         catch(java.util.NoSuchElementException e){}
         for(int i=0;i<orderedDeaths.size();i++)
             Log.errOut(thread.getName(),(String)orderedDeaths.elementAt(i,2));
-            
+
         thread.status("killing tick groups.");
         for(int x=0;x<orderedDeaths.size();x++)
         {
@@ -910,7 +908,7 @@
                 }
             }
         }
-        
+
         thread.status("Done checking threads");
     }
 
@@ -918,7 +916,7 @@
     {
         while(isAllSuspended())
             try{Thread.sleep(2000);}catch(Exception e){}
-            
+
         if((!CMSecurity.isDisabled("UTILITHREAD"))
         &&(!CMSecurity.isDisabled("THREADTHREAD")))
         {
@@ -926,14 +924,14 @@
             Resources.removeResource("SYSTEM_HASHED_MASKS");
         }
     }
-    
+
     public boolean activate() {
         if(thread==null)
-            thread=new ThreadEngine.SupportThread("THThreads"+Thread.currentThread().getThreadGroup().getName().charAt(0), 
+            thread=new ThreadEngine.SupportThread("THThreads"+Thread.currentThread().getThreadGroup().getName().charAt(0),
                     MudHost.TIME_UTILTHREAD_SLEEP, this, CMSecurity.isDebugging("UTILITHREAD"));
         if(!thread.started)
             thread.start();
         return true;
     }
-    
+
 }
Index: com/planet_ink/coffee_mud/core/threads/Tick.java
===================================================================
--- com/planet_ink/coffee_mud/core/threads/Tick.java	(revision 3057)
+++ com/planet_ink/coffee_mud/core/threads/Tick.java	(working copy)
@@ -19,7 +19,7 @@
 import java.util.*;
 
 
-/* 
+/*
    Copyright 2000-2010 Bo Zimmerman
 
    Licensed under the Apache License, Version 2.0 (the "License");
@@ -40,7 +40,7 @@
 	private final ThreadEngine myEngine;
     public final long TICK_TIME;
     private final int tickObjectCounter;
-    
+
 	public volatile long lastStart=0;
 	public volatile long lastStop=0;
 	public volatile long milliTotal=0;
@@ -50,10 +50,10 @@
     public volatile TockClient lastClient=null;
 
 	private static volatile int tickObjReference=0;
-	
+
     private volatile long SUBTRACT_TIME=0;
     private volatile TreeSet<TockClient> tickers=new TreeSet<TockClient>();;
-    
+
 	public Tick(long sleep)
 	{
         super("Tick."+(tickObjReference+1));
@@ -72,7 +72,7 @@
         myEngine=null;
 		this.start();
 	}
-	
+
 	public Tick(ThreadEngine theEngine, long sleep)
 	{
 		super("Tick."+(tickObjReference+1));
@@ -92,7 +92,7 @@
 		catch(Exception e){}
 		return this;
 	}
-	
+
 	public TockClient fetchTickerByIndex(int i)
 	{
 		int x=0;
@@ -101,19 +101,19 @@
 				return C;
 		return null;
 	}
-	
+
 	public Iterator<TockClient> tickers(){return tickers.iterator();}
 	public int numTickers(){return tickers.size();}
 	public Iterator<TockClient> getTickSet(Tickable T, int tickID)
 	{
 		LinkedList<TockClient> subSet = new LinkedList<TockClient>();
-		if(tickID >= 0)
+		if(tickID < 0)
 			subSet.addAll(tickers.subSet(new TockClient(T,0,-1), true, new TockClient(T,0,Integer.MAX_VALUE), true));
 		else
 			subSet.addAll(tickers.subSet(new TockClient(T,0,tickID), true, new TockClient(T,0,tickID), true));
 		return subSet.iterator();
 	}
-	
+
 	public Iterator<TockClient> getLocalItems(int itemTypes, Room R)
 	{
 		LinkedList<TockClient> localItems=null;
@@ -161,17 +161,17 @@
 		if(localItems == null) return null;
 		return localItems.iterator();
 	}
-	
-	
+
+
 	public boolean contains(Tickable T, int tickID)
 	{
 		if(tickID >= 0)
 			return tickers.contains(new TockClient(T,0,tickID));
 		return tickers.subSet(new TockClient(T,0,-1), true, new TockClient(T,0,Integer.MAX_VALUE), true).size()>0;
 	}
-    
+
     public int getCounter(){return tickObjectCounter;}
-    
+
 	public void delTicker(TockClient C)
 	{
 		TreeSet<TockClient> newTickers=(TreeSet<TockClient>)tickers.clone();
@@ -187,13 +187,13 @@
 			tickers=newTickers;
 		}
 	}
-	
+
     public Tickable lastTicked()
     {
         return lastClient!=null?lastClient.clientObject:null;
     }
 
-    public String getStatus() 
+    public String getStatus()
     {
     	Tickable lastTicked = lastTicked();
     	if((lastTicked==null)||(myEngine==null))
@@ -202,7 +202,7 @@
     		return "Sleeping";
     	return "Ticking: "+lastTicked.ID()+": "+lastTicked.name()+": "+((myEngine!=null)?myEngine.getTickStatusSummary(lastTicked):"null");
     }
-    
+
 	public void shutdown()
 	{
 		tickers.clear();
Index: com/planet_ink/coffee_mud/Items/MiscMagic/StdWand.java
===================================================================
--- com/planet_ink/coffee_mud/Items/MiscMagic/StdWand.java	(revision 3057)
+++ com/planet_ink/coffee_mud/Items/MiscMagic/StdWand.java	(working copy)
@@ -17,7 +17,7 @@
 
 import java.util.*;
 
-/* 
+/*
    Copyright 2000-2010 Bo Zimmerman
 
    Licensed under the Apache License, Version 2.0 (the "License");
@@ -55,7 +55,7 @@
 
 	public int maxUses(){return Integer.MAX_VALUE;}
 	public void setMaxUses(int newMaxUses){}
-	
+
 	public static boolean useTheWand(Ability A, MOB mob, int level)
 	{
 		int manaRequired=5;
@@ -79,14 +79,14 @@
 		mob.curState().adjMana(-manaRequired,mob.maxState());
 		return true;
 	}
-	
+
 	public int value()
 	{
 		if(usesRemaining()<=0)
 			return 0;
 		return super.value();
 	}
-	
+
 	public static String getWandWord(String from)
 	{
 		int hash=from.hashCode();
@@ -101,7 +101,7 @@
 			miscText=theSpell.ID();
 		secretWord=StdWand.getWandWord(miscText);
 	}
-	
+
 	public void setMiscText(String newText)
 	{
 		super.setMiscText(newText);
@@ -127,7 +127,8 @@
 						   String message)
 	{
 		if((mob.isMine(this))
-		   &&(!this.amWearingAt(Wearable.IN_INVENTORY)))
+		   &&(!this.amWearingAt(Wearable.IN_INVENTORY))
+		   &&(message != null))
 		{
 			Environmental target=null;
 			if((mob.location()!=null))
@@ -223,7 +224,7 @@
 			}
 		}
 	}
-	
+
 	public void executeMsg(Environmental myHost, CMMsg msg)
 	{
 		MOB mob=msg.source();
Index: com/planet_ink/coffee_mud/WebMacros/JournalInfo.java
===================================================================
--- com/planet_ink/coffee_mud/WebMacros/JournalInfo.java	(revision 3057)
+++ com/planet_ink/coffee_mud/WebMacros/JournalInfo.java	(working copy)
@@ -17,7 +17,7 @@
 
 
 
-/* 
+/*
    Copyright 2000-2010 Bo Zimmerman
 
    Licensed under the Apache License, Version 2.0 (the "License");
@@ -63,7 +63,7 @@
 			page=mpage;
 		if(page!=null)
 		{
-			if(page.length()==0) 
+			if(page.length()==0)
 				page="0";
 			else
 			{
@@ -75,7 +75,7 @@
 		if((dbsearch!=null)&&(dbsearch.length()>0))
 			parent=null;
 		else
-		if(parent==null) 
+		if(parent==null)
 			parent="";
 		String httpkey="JOURNAL: "+journalName+": "+parent+": "+dbsearch+": "+page;
 		Vector<JournalsLibrary.JournalEntry> msgs=(Vector<JournalsLibrary.JournalEntry>)httpReq.getRequestObjects().get(httpkey);
@@ -89,10 +89,10 @@
 				long pageDate = CMath.s_long(page);
 				int limit = CMProps.getIntVar(CMProps.SYSTEMI_JOURNALLIMIT);
 				if(limit<=0) limit=Integer.MAX_VALUE;
-				msgs = new Vector<JournalsLibrary.JournalEntry>(limit);
-				if((pageDate <= 0) 
-				&& (stats.stuckyKeys!=null) 
-			    && ((dbsearch==null)||(dbsearch.length()==0)) 
+				msgs = new Vector<JournalsLibrary.JournalEntry>();
+				if((pageDate <= 0)
+				&& (stats.stuckyKeys!=null)
+			    && ((dbsearch==null)||(dbsearch.length()==0))
 			    && ((parent != null)&&(parent.length()==0)))
 				{
 					for(String stuckyKey : stats.stuckyKeys)
@@ -128,7 +128,7 @@
 		}
 		return msgs;
 	}
-	
+
 	public static void clearJournalCache(ExternalHTTPRequests httpReq, String journalName)
 	{
 		Hashtable h = (Hashtable)httpReq.getRequestObjects().clone();
@@ -139,7 +139,7 @@
 				httpReq.getRequestObjects().remove(o.toString());
 		}
 	}
-	
+
 	public static JournalsLibrary.JournalEntry getNextEntry(List<JournalsLibrary.JournalEntry> info, String key)
 	{
 		if(info==null)
@@ -158,20 +158,20 @@
 		}
 		return null;
 	}
-	
+
 	public String runMacro(ExternalHTTPRequests httpReq, String parm)
 	{
 		Hashtable parms=parseParms(parm);
 		String journalName=httpReq.getRequestParameter("JOURNAL");
-		if(journalName==null) 
+		if(journalName==null)
 			return " @break@";
-		
+
 		if(parms.containsKey("NOWTIMESTAMP"))
 			return ""+System.currentTimeMillis();
-		
+
 		if(parms.containsKey("JOURNALLIMIT"))
 			return ""+CMProps.getIntVar(CMProps.SYSTEMI_JOURNALLIMIT);
-		
+
 		if(parms.containsKey("UNPAGEDCOUNT"))
 		{
 			String page=httpReq.getRequestParameter("JOURNALPAGE");
@@ -180,14 +180,14 @@
 			httpReq.addRequestParameters("JOURNALPAGE",page);
 			return String.valueOf(ct);
 		}
-		
+
 		if(parms.containsKey("COUNT"))
 			return ""+JournalInfo.getMessages(httpReq,journalName).size();
-		
+
 		MOB M = Authenticate.getAuthenticatedMob(httpReq);
 		if((CMLib.journals().isArchonJournalName(journalName))&&((M==null)||(!CMSecurity.isASysOp(M))))
 		    return " @break@";
-		
+
 		String msgKey=httpReq.getRequestParameter("JOURNALMESSAGE");
 		String cardinal=httpReq.getRequestParameter("JOURNALCARDINAL");
         JournalsLibrary.JournalEntry entry=null;
@@ -205,7 +205,7 @@
 	        entry= JournalInfo.getEntry(JournalInfo.getMessages(httpReq,journalName),msgKey);
         if(parms.containsKey("ISMESSAGE"))
         	return String.valueOf(entry!=null);
-		if(entry==null)	
+		if(entry==null)
 			return " @break@";
 		if(cardinal!=null)
 			entry.cardinal=CMath.s_int(cardinal);
@@ -320,7 +320,7 @@
 				if(dateString.equals(yesterdayString))
 					return "Yesterday";
 				return dateString;
-				
+
 			}
 			else
 			if(parms.containsKey("TIMEUPDATED"))
